Bzip2

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 5. května 2022; ověření vyžaduje 1 úpravu .

bzip2
Typ Komprese dat
Vývojář Sewarde, Juliane
Zapsáno v Xi
Operační systém Multiplatformní software
První vydání 18. července 1996
Nejnovější verze
Čitelné formáty souborů bzip2
Vygenerované formáty souborů bzip2
Licence BSD licence [1]
webová stránka sourceware.org/bzip2/

bzip2  je bezplatný a open source nástroj příkazového řádku pro kompresi dat , implementace algoritmu Burrows-Wheeler .

Vyvinul a poprvé publikoval Julian Seward v červenci 1996  ( verze 0.15). Stabilita a popularita kompresoru v průběhu let rostla a verze 1.0 byla zveřejněna koncem roku 2000 .

Účinnost

V souladu s tradicí UNIXu může bzip2provádět pouze jednu operaci najednou: buď komprimovat nebo dekomprimovat, a to pouze pro jeden soubor. Při komprimaci bzip2připojí k názvu souboru příponu " .bz2". Chcete-li sbalit více souborů, jsou nejprve archivovány do jednoho souboru pomocí nástroje tara poté komprimovány pomocí bzip2. Takové archivy mají obvykle příponu „ .tar.bz2“.

bzip2komprimuje většinu souborů efektivněji, ale pomaleji než tradiční nástroje gzipnebo zip. V tomto ohledu je podobný jiným moderním kompresním algoritmům.

bzip2provádí kompresi dat se značným zatížením CPU (vzhledem k jeho matematickému aparátu). bzip2se používají, pokud neexistují žádná omezení na dobu komprese a zatížení CPU , například pro jednorázové zabalení velkého množství dat.

V některých případech je bzip2z hlediska účinnosti komprese nižší než archivátory ( 7-Zipzpůsob komprese LZMA ) a rar. Podle autora programu z roku 2005 je kompresní metoda bzip2v účinnosti komprese nižší o 10-15 % [3] než nejlepší metody známé v té době ( PPM ) [4] , ale zároveň 2x rychlejší v kompresi a 6x rychlejší při vybalování.

Popis algoritmu

Kompresní metoda bzip2funguje takto:

Přibližnou velikost bloku lze vybrat pomocí argumentů příkazového řádku (" -1" pro 100 kB, " -2" pro 200 KB, ..., " -9" pro 900 KB). Každý blok je komprimován nezávisle, komprimované bloky jsou zapisovány sekvenčně jeden za druhým, na začátku každého je použita 48bitová sekvence – magické číslo 0x314159265359 (v kódování ASCII se při zarovnání na hranici bajtů zobrazuje jako „ 1AY & SY"), tedy zápis prvních desetinných míst čísla π ve formátu BCD [5] . Konec souboru je označen 48bitovou konstantou 0x177245385090, což je druhá odmocnina z pí. Na začátku souborů bzip2 je použita následující hlavička: dvoubajtová signatura "BZ", dále označení metody komprese entropie - "h" (Huffman) a velikost bloku (desetinné číslo od 0 do 9).

Použitím nezávislé komprese jednotlivých bloků jsou možné paralelní implementace kompresního nebo dekompresního formátu (dekomprese může vyžadovat offset index pro každý blok) [6] .

Použití

Příklady použití bzip2.

# Příkaz pro kompresi souboru "file" soubor bzip2 # nebo bzip2 --komprimovat soubor # Příkaz pro rozbalení souboru "file.bz2" bzip2 -d soubor.bz2 # nebo bzip2 --dekomprimujte soubor.bz2 # nebo soubor bunzip2.bz2 # bunzip2 - kopie bzip2 nebo odkaz na bzip2

Argumenty příkazového řádku jsou bzip2v podstatě stejné jako pro gzip.

# Příkaz pro rozbalení archivu tar komprimovaného pomocí bzip2 bzip2 -cd file.tar.bz2 | tar -xvf - # nebo bzip2 --stdout --decompress file.tar.bz2 \ | tar --extract --verbose --file- # Příkaz pro vytvoření archivu tar komprimovaného pomocí bzip2 tar -cvf - files | bzip2 -9 > soubor.tar.bz2 # nebo tar --create --verbose --file - soubory \ | bzip2 -9 > soubor.tar.bz2

Verze GNU tar podporuje příznak " -j" (" --bzip2"), který umožňuje vytváření a rozbalování souborů " tar.bz2 " bez použití přesměrování I/O ( pipeline ) .  Příklad:

# Balení dat do archivu tar a komprese bzip2 pomocí GNU tar tar -cvjf soubor.tar.bz2 seznam_souborů # nebo tar --create --verbose --bzip2 --file file.tar.bz2 seznam_souborů # Rozbalte archiv tar komprimovaný pomocí bzip2 pomocí GNU tar tar -xvjf soubor.tar.bz2 # nebo tar --extract --verbose --bzip2 --file file.tar.bz2

Moderní verze GNU tardokážou automaticky určit metodu komprese dat, a proto lze příznak " -j" (" --bzip2") vynechat. Příklad:

tar -xvf soubor.tar.bz2 # nebo tar --extract --verbose --file file.tar.bz2

Kromě toho existuje sada nástrojů pro vyhledávání, zobrazování, obnovu a porovnávání dat ve formátu bzip2:

  • bzcat - rozbalení dat a výstup na terminál;
  • bzmore, bzless — rozbalení dat a výstup stránky po stránce do terminálu;
  • bzcmp - rozbalení dvou souborů, porovnání obsahu a nahlášení výsledku: „rovná se“ nebo „není se rovná“;
  • bzdiff - rozbalení dvou souborů, porovnání obsahu a zobrazení rozdílů;
  • bzgrep, bzegrep, bzfgrep — rozbalení dat a vyhledávání v rozbalených;
  • bzip2recover - rozbalení všech bloků, které lze pouze rozbalit.

Formát souboru

bzip2
Rozšíření .bz2
Podpis BZh
Vývojář Sewarde, Juliane
Poslední vydání
Typ formátu Komprese dat
otevřený formát ? Ano: BSD licence
webová stránka sourceware.org/bz… ​(  anglicky)

Archiv .bz2obsahuje proud ( anglicky  stream ) komprimovaných dat. Slovo „stream“ se používá proto, že data nelze logicky oddělit a datové bloky jsou komprimovány nezávisle na sobě. Komprimovaná data se skládají z následujících polí:

  • 4bajtová hlavička;
  • nula nebo více bloků komprimovaných dat různých velikostí;
  • značku indikující konec komprimovaných dat a 32bitový kontrolní součet (CRC) vypočítaný pro celý proud;
  • několik nepoužitých bitů k vyplnění velikosti proudu na celé číslo bajtů.
Název pole Velikost pole v bitech Popis
.kouzlo 16 BZ — konstanta , podpis , magické číslo .
.verze osm Bajt kódující číslo verze. 0 Verze 1 (bzip1). Zastaralé, nepoužívané. h Verze 2 (bzip2). "h" z angličtiny.  huffmanovo kódování .
.hundred_k_blocksize osm Velikost nekomprimovaného datového bloku ve stovkách kilobajtů . 1 Sto kB (100 kB). 2 Dvě stě kB (200 kB). … A tak dále 9 Devět set kB (900 kB).
.compressed_magic 48 0x314159265359 - konstanta , číslo π , zapsané v binárně kódovaném dekadickém kódu (BCD).
.crc 32 Kontrolní součet vypočítaný pro aktuální blok.
.náhodně jeden 0 normální 1 s přidanou náhodností (zastaralé)
.origPtr 24 počáteční ukazatel na pole BWT po konverzi
.huffman_used_map 16 rozsah bitové masky 16 bajtů, "dostupné" / "chybějící"
.huffman_used_bitmaps 0..256 bitová maska ​​použitých znaků, "dostupné"/"chybí" (násobek 16)
.huffman_groups 3 Číslo mezi 2 a 6, počet používaných Huffmanových tabulek .
.selectors_used patnáct Číslo udávající, kolikrát byla Huffmanova tabulka změněna (každých 50 bajtů).
*.selector_list 1..6 bitové sekvence doplněné nulovými bity (0..62) pro Huffmanovy tabulky po MTF (*selectors_used)
.start_huffman_length 5 0..20 počáteční bitové délky pro Huffmanovy delty
*.delta_bit_length 1..40 0 další postava 1 změnit délku

{ 1=> snížit délku o 1; 0=> zvětšit délku o 1} (*(symboly+2)*skupiny)

.obsah 2...∞ Datový tok kódovaný pomocí Huffmanových tabulek. Pokračuje až do konce bloku. Maximální délka je 7 372 800 bitů .
.eos_magic 48 0x177245385090 je konstanta , druhá odmocnina z π (sqrt(pi)) v binárně kódované desítkové soustavě (BCD).
.crc 32 Kontrolní součet vypočtený pro celý stream.
.vycpávka 0..7 Nepoužité bity (0 až 7). Účel: zvětšení velikosti archivu na násobek jednoho bajtu (8 bitů ) ( zarovnání dat ).

Maximální velikost nekomprimovaného bloku pro klasický formát je 900 kB . Pokud se blok skládá z jednoho opakovaného znaku, po zakódování RLE zabere blok asi 46 mega bajtů (45 899 236 bajtů ) a po všech operacích bude velikost souboru .bz246 bajtů . Pokud je kód opakovaného znaku 251, velikost souboru .bz2bude 40 bajtů a kompresní poměr bude 1 147 480,9:1.

Poznámky

  1. bzip2 : Home (downlink) . Julian Seward . „Proč bych to chtěl používat? [..] Protože je to open-source (licence ve stylu BSD) a pokud vím, bez patentů.". Datum přístupu: 27. září 2008. Archivováno z originálu 15. února 2012. 
  2. 1 2 https://sourceware.org/pub/bzip2/
  3. bzip2 a libbzip2 Archivováno 25. prosince 2006 na Wayback Machine , "Obvykle komprimuje soubory na 10 až 15 % nejlepších dostupných technik (skupina statistických kompresorů PPM)"
  4. V současnosti jsou nejefektivněji komprimovány různé implementace metody PAQ . Použití této metody je však extrémně obtížné kvůli nízkému výkonu (komprese vyžaduje hodně času).
  5. Hakbeom Jang; Channoh Kim, Jae W. Lee. Praktická spekulativní paralelizace dekompresních algoritmů s proměnnou délkou  . Konferenční jazyky, kompilátory a nástroje pro vestavěné systémy 2013 (20.–21. června 2013). - "Formát souboru bzip2 definuje 48bitový vzor zvaný magická hlavička (0x314159265359), který signalizuje začátek nového komprimovaného bloku." Získáno 3. července 2015. Archivováno z originálu dne 28. ledna 2016.
  6. Dbzip2 – MediaWiki . Získáno 17. 8. 2018. Archivováno z originálu 18. 8. 2018.

Odkazy