bzip2

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
bzip2
Logo
Entwickler Julian Seward
Aktuelle Version 1.0.6
(20. September 2010)
Betriebssystem Linux/Unix,Windows
Programmier­sprache C
Kategorie Packprogramm
Lizenz BSD-ähnlich
Deutschsprachig nein
bzip.org (englisch)

Vorlage:Infobox Dateiformat/Wartung/Standard fehltVorlage:Infobox Dateiformat/Wartung/Website fehlt

BZip2
Dateiendung: .bz2
MIME-Type: application/x-bzip
Magische Zahl:

42 5A 68 hex
BZh (String)

Entwickelt von: Julian Seward
Art: Datenkompression

bzip2 ist ein frei verfügbares Komprimierungsprogramm zur verlustfreien Kompression von Dateien, entwickelt von Julian Seward. Es ist frei von jeglichen patentierten Algorithmen und wird unter einer BSD-ähnlichen Lizenz vertrieben.

Bzip2 komprimiert Daten in einem dreistufigen Verfahren: Zuerst werden die Eingangsdaten blockweise mit der umkehrbaren Burrows-Wheeler-Transformation sortiert. Das Ergebnis wird dann einer Move-to-Front-Transformation unterzogen. Deren Ergebnis wird dann schließlich einer Huffman-Kodierung unterzogen, die die eigentliche Datenkompression vornimmt.

Die Kompression mit bzip2 ist oft effektiver, aber meist erheblich langsamer als die Kompression mit gzip oder rar. Seit 2003 existiert jedoch auch die Variante pbzip2, die Multi-Threading beherrscht und auf aktuellen Mehrkernprozessoren erheblich schneller ist. Diese Parallelisierung ist nur möglich, weil der Algorithmus von bzip2 den Eingabestrom blockweise komprimiert, wobei jeder Block unabhängig von den vorangegangenen Blöcken komprimiert wird. Mit bzip2 komprimierte Dateien werden durch die Dateiendung .bz2 gekennzeichnet. tar-Dateien, die mit bzip2 komprimiert wurden, haben üblicherweise die Erweiterung .tar.bz2 oder .tbz2. Ein Vorteil solcher mit bzip2 komprimierter tar-Dateien ist, dass sich bei Lesefehlern oder Beschädigungen alle noch lesbaren Blöcke mittels bzip2recover herauskopieren und anschließend entpacken lassen, während andere Kompressionsverfahren nach einem Lesefehler nicht weiterarbeiten können.

bzip2 ist der Nachfolger von bzip, das ursprünglich arithmetisches Kodieren nach dem Blocksort benutzte; aus patentrechtlichen Gründen wurde bzip jedoch nicht mehr weiterentwickelt.

Dateiformat[Bearbeiten]

Ein .bz2 Datenstrom beginnt mit einer Signatur (4 Byte), gefolgt von Null oder mehr komprimierten Blöcken, direkt anschließend folgt ein End-of-Stream-Marker und ein CRC (32-Bit) für den Ursprungsinhalt der ganzen Datei. Die komprimierten Blöcke sind Bit-aligned (kein Padding).

VarName                     Bit's    Description
________________________________________________________________
.magic:                     2 *8     'BZ' signature/magic number
.version:                   1 *8     'h' for Bzip2 ('H'uffman coding), '0' for Bzip1 (deprecated)
.hundred_k_blocksize:       1 *8     '1'..'9' block-size 100 kB-900 kB (uncompressed)

.compressed_magic:          6 *8     '1AY&SY' -> 0x314159265359 (BCD (pi))
.crc:                       4 *8     checksum for this block
.randomised:                1 (! bit) 0 => normal,  1 => randomised (deprecated)
.origPtr:                   3 *8     starting pointer into BWT for after untransform
.huffman_used_map:          2 *8     bitmap for following 'huffman_used_bitmaps', of ranges of 16 bytes, present/not present
.huffman_used_bitmaps:  0..32 *8     bitmap, of symbols used, present/not present (multiples of 16)
.huffman_groups:            3        2..6 number of different Huffman tables in use
.selectors_used:           15        number of times that the Huffman tables are swapped (each 50 bytes)
*.selector_list:         1..6        zero-terminated bit runs (0..62) of MTF'ed Huffman table (*selectors_used)
.start_huffman_length:      5        0..20 starting bit length for Huffman deltas
*.delta_bit_length:      1..5 *8     0 => next symbol; 1 => alternated length
                                     { 1 => decrement length;   0 => increment length } ( *(symbols + 2) * groups )
.contents:               2..∞        Huffman encoded data stream until end of block (max. 7372800 bit)

.eos_magic:                 6 *8     \x17 'rE8P' \x90 -> 0x177245385090 (BCD sqrt(pi))
.crc:                       4 *8     checksum for whole stream
.padding:                0..7        align to whole byte

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]