bzip2

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 16. November 2020 um 13:01 Uhr durch imported>Matthias Winkelmann(239621) (→‎Dateiformat: Tabellenstruktur).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
bzip2

Logo
Basisdaten

Entwickler Julian Seward
Aktuelle Version 1.0.8
(13. Juli 2019)
Betriebssystem Linux/Unix, Windows
Programmiersprache C
Kategorie Packprogramm
Lizenz BSD-ähnlich
deutschsprachig nein
BZip2
Dateiendung: .bz2
MIME-Type: application/x-bzip
Magische Zahl: 42 5A 68 hex
BZh

(String)

Entwickelt von: Julian Seward
Erstveröffentlichung: 1996
Art: Datenkompression

bzip2 ist ein freies 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. pbzip zerlegt hierfür den Eingabedatenstrom in mehrere einzelne Ströme, welche separat komprimiert werden. Das Ergebnis ist eine Datei, welche die konkatenierten Bzip-Ströme enthält.

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.

libbzip2

Das Kommandozeilenprogramm bzip2 benutzt für die eigentliche Kompressions- und Dekompressionsarbeit eine Programmbibliothek namens libbzip2, welche auch von anderen Programmen, die das bz2-Dateiformat lesen und schreiben können, verwendet wird.

Diese Programmbibliothek bietet Funktionen, um beliebige Daten im Hauptspeicher zu komprimieren, und eine stdio-ähnliche Schnittstelle zum Lesen und Schreiben von bz2-komprimierten Dateien.

Dateiformat

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 Bits Description
Header
.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)
Blocks 1..n
.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..900 KB Huffman encoded data stream until end of block (max. 900 * 1024 * 8 => 7372800 bit)
.eos_magic 6 *8 \x17 'rE8P' \x90 -> 0x177245385090 (BCD sqrt(pi))
End
.crc 4 *8 checksum for whole stream
.padding 0..7 align to whole byte

Siehe auch

Weblinks