Bzip2

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 5 mai 2022; verificarea necesită 1 editare .

bzip2
Tip de Comprimarea datelor
Dezvoltator Seward, Julian
Scris in Xi
Sistem de operare Software multiplatformă
Prima editie 18 iulie 1996
ultima versiune
Formate de fișiere care pot fi citite bzip2
Formate de fișiere generate bzip2
Licență Licență BSD [1]
Site-ul web sourceware.org/bzip2/

bzip2 este un utilitar de linie de comandă  gratuit și open source pentru comprimarea datelor , o implementare a algoritmului Burrows-Wheeler .

Dezvoltat și publicat pentru prima dată de Julian Seward în iulie 1996  ( versiunea 0.15). Stabilitatea și popularitatea compresorului au crescut de-a lungul anilor, iar versiunea 1.0 a fost publicată la sfârșitul anului 2000 .

Eficiență

În conformitate cu tradiția UNIX , bzip2poate efectua o singură operație la un moment dat: fie comprimare, fie decomprimare și pentru un singur fișier. Când este comprimat bzip2, adaugă extensia „ .bz2” la numele fișierului. Pentru a împacheta mai multe fișiere, acestea sunt mai întâi arhivate într-un singur fișier cu un utilitar tarși apoi comprimate cu bzip2. Astfel de arhive au de obicei extensia " .tar.bz2".

bzip2comprimă majoritatea fișierelor mai eficient, dar mai lent decât utilitățile tradiționale gzipsau zip. În acest sens, este similar cu alți algoritmi moderni de compresie.

bzip2efectuează compresia datelor cu o încărcare semnificativă pe CPU (datorită aparatului său matematic). bzip2sunt utilizate dacă nu există restricții privind timpul de compresie și încărcarea procesorului , de exemplu, pentru ambalarea unică a unei cantități mari de date.

În unele cazuri, este bzip2inferior în ceea ce privește eficiența compresiei față de arhivatorii ( 7-Zipmetoda de compresie LZMA ) și rar. Potrivit autorului programului din 2005, metoda de compresie este bzip2inferioară ca eficiență a compresiei cu 10-15% [3] față de cele mai bune metode cunoscute la acea vreme ( PPM ) [4] , dar în același timp de 2 ori mai rapidă în compresie și de 6 ori mai rapidă la despachetare.

Descrierea algoritmului

Metoda de compresie bzip2funcționează astfel:

Dimensiunea aproximativă a blocului poate fi selectată folosind argumente de linie de comandă (" -1" pentru 100 kiloocteți, " -2" pentru 200 KB, ..., " -9" pentru 900 KB). Fiecare bloc este comprimat independent, blocurile comprimate sunt scrise secvențial unul după altul, la începutul fiecăruia se folosește o secvență de 48 de biți - numărul magic 0x314159265359 (în codificarea ASCII, când este aliniat la granița unui octet, este afișat ca " 1AY & SY"), adică scrierea primelor cifre zecimale ale numărului π în format BCD [5] . Sfârșitul fișierului este marcat cu constanta de 48 de biți 0x177245385090, care este rădăcina pătrată a lui pi. La începutul fișierelor bzip2, se folosește următorul antet: semnătura pe doi octeți „BZ”, apoi o indicație a metodei de compresie a entropiei - „h” (Huffman) și dimensiunea blocului (număr zecimal de la 0 la 9).

Prin utilizarea compresiei independente a blocurilor individuale, sunt posibile implementări de format de compresie paralelă sau decompresie (decompresia poate necesita un index de offset pentru fiecare bloc) [6] .

Utilizare

Exemple de utilizare bzip2.

# Comanda pentru comprimarea fișierului „fișier” fișier bzip2 # sau bzip2 --comprimați fișierul # Comanda pentru despachetarea fișierului „file.bz2” bzip2 -d fișier.bz2 # sau bzip2 --decompress file.bz2 # sau bunzip2 fișier.bz2 # bunzip2 - copie a bzip2 sau link la bzip2

Argumentele liniei de comandă sunt bzip2practic aceleași ca pentru gzip.

# Comandă pentru a despacheta o arhivă tar comprimată cu bzip2 bzip2 -cd file.tar.bz2 | tar -xvf - # sau bzip2 --stdout --decompress file.tar.bz2 \ | tar --extract --verbose --file- # Comanda pentru a crea o arhivă tar comprimată cu bzip2 tar -cvf - fișiere | bzip2 -9 > file.tar.bz2 # sau tar --create --verbose --file - files \ | bzip2 -9 > fișier.tar.bz2

Versiunea GNU tar acceptă marcajul " -j" (" --bzip2"), care permite crearea și despachetarea fișierelor " tar.bz2 " fără utilizarea redirecționărilor I/O ( pipeline ) .  Exemplu:

# Ambalarea datelor într-o arhivă tar și compresia bzip2 cu tar GNU tar -cvjf file.tar.bz2 list_of_files # sau tar --create --verbose --bzip2 --file file.tar.bz2 list_of_files # Despachetați o arhivă tar comprimată cu bzip2 folosind GNU tar tar -xvjf fișier.tar.bz2 # sau tar --extract --verbose --bzip2 --file file.tar.bz2

Versiunile moderne de GNU tarpot determina automat metoda de comprimare a datelor și, prin urmare, indicatorul -j„ „ --bzip2„ poate fi omis. Exemplu:

tar -xvf file.tar.bz2 # sau tar --extract --verbose --file file.tar.bz2

În plus, există un set de utilitare pentru căutarea, afișarea, restaurarea și compararea datelor în formatul bzip2:

  • bzcat - despachetarea datelor si iesirea catre terminal;
  • bzmore, bzless — despachetarea datelor și transmiterea pagină cu pagină către terminal;
  • bzcmp - despachetarea a două fișiere, compararea conținutului și raportarea rezultatului: „egal” sau „neegal”;
  • bzdiff - despachetarea a doua fisiere, compararea continutului si afisarea diferentelor;
  • bzgrep, bzegrep, bzfgrep — despachetarea datelor și căutarea în despachetarea;
  • bzip2recover - despachetarea oricăror blocuri care pot fi doar despachetate.

Format de fișier

bzip2
Extensie .bz2
Semnătură BZh
Dezvoltator Seward, Julian
Ultima lansare
Tip de format Comprimarea datelor
format deschis ? Da: licență BSD
Site-ul web sourceware.org/bz… ​(  engleză)

Arhiva „ .bz2” conține un flux ( stream în engleză  ) de date comprimate. Cuvântul „flux” este folosit deoarece datele nu pot fi separate logic și blocurile de date sunt comprimate independent unul de celălalt. Datele comprimate constau din următoarele câmpuri:

  • antet de 4 octeți;
  • zero sau mai multe blocuri de date comprimate de diferite dimensiuni;
  • un marker care indică sfârșitul datelor comprimate și o sumă de control pe 32 de biți (CRC) calculată pentru întregul flux;
  • câțiva biți neutilizați pentru a completa dimensiunea fluxului la un număr întreg de octeți.
Numele domeniului Dimensiunea câmpului în biți Descriere
.magie 16 BZ — constantă , semnătură , număr magic .
.versiune opt Un octet care codifică numărul versiunii. 0 Versiunea 1 (bzip1). Depreciat, nefolosit. h Versiunea 2 (bzip2). „h” din engleză.  codificare huffman .
.sute_k_dimensiuni opt Dimensiunea blocului de date necomprimat în sute de kiloocteți . 1 O sută de KB (100 KB). 2 Două sute KB (200 KB). … Si asa mai departe 9 Nouă sute KB (900 KB).
.magie_comprimată 48 0x314159265359 - constantă , numărul π , scris în cod zecimal binar (BCD).
.crc 32 Suma de control calculată pentru blocul curent.
.randomizat unu 0 normal 1 cu caracter aleatoriu adăugat (depreciat)
.origPtr 24 indicatorul de pornire către matricea BWT după conversie
.huffman_used_map 16 intervale de masca de biți de 16 octeți, „disponibil” / „lipsă”
.huffman_used_bitmaps 0..256 masca de biți a caracterelor utilizate, „disponibil”/„lipsă” (multiplu din 16)
.huffman_groups 3 Un număr între 2 și 6, numărul de mese Huffman utilizate .
.selectoare_utilizate cincisprezece Un număr care indică de câte ori a fost schimbat tabelul Huffman (la fiecare 50 de octeți).
*.listă_selector 1..6 secvențe de biți umplute cu zero biți (0..62) pentru tabelele Huffman după MTF (*selectors_used)
.start_huffman_length 5 0..20 lungimi inițiale de biți pentru deltele Huffman
*.delta_bit_length 1..40 0 următorul personaj 1 schimba lungimea

{ 1 => micșora lungimea cu 1; 0 => crește lungimea cu 1} (*(simboluri+2)*grupuri)

.conținut 2..∞ Flux de date codificat cu tabele Huffman. Continuă până la sfârșitul blocului. Lungimea maximă este de 7.372.800 de biți .
.eos_magic 48 0x177245385090 este o constantă , rădăcina pătrată a lui π (sqrt(pi)) în zecimală codificată binar (BCD).
.crc 32 Sumă de control calculată pentru întregul flux.
.captuseala 0..7 Biți neutilizați (de la 0 la 7). Scop: creșterea dimensiunii arhivei la un multiplu de un octet (8 biți ) ( alinierea datelor ).

Dimensiunea maximă a blocului necomprimat pentru formatul clasic este de 900 kiloocteți . Dacă blocul constă dintr-un caracter repetat, după codificarea RLE blocul va lua aproximativ 46 de mega octeți (45 899 236 de octeți ), iar după toate operațiunile dimensiunea fișierului .bz2va fi de 46 de octeți . Dacă codul de caractere repetat este 251, dimensiunea fișierului .bz2va fi de 40 de octeți , iar raportul de compresie va fi de 1.147.480,9:1.

Note

  1. bzip2 : Acasă (link descendent) . Julian Seward . „De ce aș vrea să-l folosesc? [..] Pentru că este open-source (licență în stil BSD) și, din câte știu eu, fără brevet.”. Data accesului: 27 septembrie 2008. Arhivat din original la 15 februarie 2012. 
  2. 1 2 https://sourceware.org/pub/bzip2/
  3. bzip2 și libbzip2 Arhivat pe 25 decembrie 2006 la Wayback Machine , „De obicei comprimă fișierele la 10% până la 15% din cele mai bune tehnici disponibile (familia PPM de compresoare statistice)”
  4. În acest moment, diferite implementări ale metodei PAQ sunt comprimate cel mai eficient . Cu toate acestea, utilizarea acestei metode este extrem de dificilă din cauza performanței scăzute (comprimarea necesită mult timp).
  5. Hakbeom Jang; Channoh Kim, Jae W. Lee. Paralelizarea speculativă practică a algoritmilor de decompresie cu lungime variabilă  . Limbaje de conferință, compilatoare și instrumente pentru sistemele încorporate 2013 (20-21 iunie 2013). - "Formatul de fișier bzip2 definește un model de 48 de biți numit antet magic (0x314159265359), care semnalează începutul unui nou bloc comprimat." Preluat la 3 iulie 2015. Arhivat din original la 28 ianuarie 2016.
  6. Dbzip2 - MediaWiki . Preluat la 17 august 2018. Arhivat din original la 18 august 2018.

Link -uri