Bzip2

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 5. maj 2022; verifikation kræver 1 redigering .

bzip2
Type Datakomprimering
Udvikler Seward, Julian
Skrevet i Xi
Operativ system Cross-platform software
Første udgave 18. juli 1996
nyeste version
Læsbare filformater bzip2
Genererede filformater bzip2
Licens BSD-licens [1]
Internet side sourceware.org/bzip2/

bzip2  er et gratis og open source kommandolinjeværktøj til datakomprimering , en implementering af Burrows-Wheeler- algoritmen .

Udviklet og første gang udgivet af Julian Seward i juli 1996  ( version 0.15). Kompressorens stabilitet og popularitet voksede gennem årene, og version 1.0 blev offentliggjort i slutningen af ​​2000 .

Effektivitet

I overensstemmelse med UNIX-traditionen kan bzip2den kun udføre én handling ad gangen: enten komprimere eller dekomprimere, og kun for én fil. Når den er komprimeret bzip2, føjer filtypen " .bz2" til filnavnet. For at pakke flere filer arkiveres de først i en enkelt fil med et hjælpeprogram tarog komprimeres derefter med bzip2. Sådanne arkiver har normalt udvidelsen " .tar.bz2".

bzip2komprimerer de fleste filer mere effektivt, men langsommere end mere traditionelle hjælpeprogrammer gzipeller zip. I denne henseende ligner det andre moderne kompressionsalgoritmer.

bzip2udfører datakomprimering med en betydelig belastning på CPU'en (på grund af dets matematiske apparat). bzip2bruges, hvis der ikke er begrænsninger på komprimeringstid og CPU -belastning , for eksempel til engangspakning af en stor mængde data.

I nogle tilfælde er det bzip2ringere med hensyn til komprimeringseffektivitet end arkivere ( LZMA-7-Zip komprimeringsmetode ) og . Ifølge forfatteren til programmet fra 2005 er kompressionsmetoden ringere i kompressionseffektivitet med 10-15 % [3] i forhold til de bedst kendte metoder på det tidspunkt ( PPM ) [4] , men samtidig 2 gange hurtigere i kompression og 6 gange hurtigere ved udpakning. rarbzip2

Beskrivelse af algoritmen

Kompressionsmetoden bzip2fungerer således:

Den omtrentlige blokstørrelse kan vælges ved hjælp af kommandolinjeargumenter (" -1" for 100 kilobytes, " -2" for 200 KB, ..., " -9" for 900 KB). Hver blok komprimeres uafhængigt, de komprimerede blokke skrives sekventielt efter hinanden, i begyndelsen af ​​hver bruges en 48-bit sekvens - det magiske tal 0x314159265359 (i ASCII-kodning, når det er justeret til en byte-grænse, vises det som " 1AY & SY"), det vil sige at skrive de første decimalcifre i tallet π i BCD [5] . Slutningen af ​​filen er markeret med 48-bit konstanten 0x177245385090, som er kvadratroden af ​​pi. I begyndelsen af ​​bzip2-filer bruges følgende header: to-byte-signaturen "BZ", derefter en indikation af entropikomprimeringsmetoden - "h" (Huffman) og blokstørrelsen (decimaltal fra 0 til 9).

Ved at bruge uafhængig komprimering af individuelle blokke er implementeringer af parallelle komprimering eller dekompressionsformater mulige (dekomprimering kan kræve et offset-indeks for hver blok) [6] .

Brug

Eksempler på brug bzip2.

# Kommando til at komprimere filen "fil" bzip2 fil # eller bzip2 --komprimer filen # Kommando til at udpakke filen "file.bz2" bzip2 -d file.bz2 # eller bzip2 --dekomprimer fil.bz2 # eller bunzip2 file.bz2 # bunzip2 - kopi af bzip2 eller link til bzip2

Kommandolinjeargumenterne er bzip2grundlæggende de samme som for gzip.

# Kommando til at udpakke et tar-arkiv komprimeret med bzip2 bzip2 -cd file.tar.bz2 | tar -xvf - # eller bzip2 --stdout --decompress file.tar.bz2 \ | tar --extract --verbose --file- # Kommando til at oprette et tar-arkiv komprimeret med bzip2 tar -cvf - filer | bzip2 -9 > file.tar.bz2 # eller tar --create --verbose --file - filer \ | bzip2 -9 > file.tar.bz2

GNU- versionen tarunderstøtter flaget " -j" (" --bzip2"), som tillader oprettelse og udpakning af " tar.bz2 "-filer uden brug af I/O-omdirigeringer ( pipeline ) .  Eksempel:

# Pakning af data i et tar-arkiv og bzip2-komprimering med GNU tar tar -cvjf file.tar.bz2 liste_over_filer # eller tar --create --verbose --bzip2 --fil fil.tar.bz2 liste_over_filer # Pak et tar-arkiv komprimeret med bzip2 ved hjælp af GNU tar tar -xvjf file.tar.bz2 # eller tar --extract --verbose --bzip2 --fil fil.tar.bz2

Moderne versioner af GNU tarkan automatisk bestemme datakomprimeringsmetoden, og derfor kan flaget " -j" (" --bzip2") udelades. Eksempel:

tar -xvf file.tar.bz2 # eller tar --extract --verbose --fil fil.tar.bz2

Derudover er der et sæt værktøjer til at søge, vise, gendanne og sammenligne data i formatet bzip2:

  • bzcat - udpakning af data og output til terminalen;
  • bzmore, bzless — dataudpakning og side-for-side output til terminalen;
  • bzcmp - udpakning af to filer, sammenligning af indholdet og rapportering af resultatet: "lige" eller "ikke ens";
  • bzdiff - udpakning af to filer, sammenligning af indholdet og visning af forskellene;
  • bzgrep, bzegrep, bzfgrep — dataudpakning og søgning i det udpakkede;
  • bzip2recover - udpakning af blokke, der kun kan pakkes ud.

Filformat

bzip2
Udvidelse .bz2
Underskrift BZh
Udvikler Seward, Julian
Seneste udgivelse
Formattype Datakomprimering
åbent format ? Ja: BSD-licens
Internet side sourceware.org/bz… (  engelsk)

Arkivet " .bz2" indeholder en strøm ( engelsk  strøm ) af komprimerede data. Ordet "stream" bruges, fordi dataene ikke kan adskilles logisk, og datablokkene komprimeres uafhængigt af hinanden. De komprimerede data består af følgende felter:

  • 4 byte header;
  • nul eller flere blokke af komprimerede data af forskellig størrelse;
  • en markør, der angiver slutningen af ​​de komprimerede data og en 32-bit checksum (CRC) beregnet for hele strømmen;
  • et par ubrugte bits for at udfylde strømstørrelsen til et helt antal bytes.
Feltnavn Feltstørrelse i bits Beskrivelse
.magi 16 BZ — konstant , signatur , magisk tal .
.version otte En byte, der koder for versionsnummeret. 0 Version 1 (bzip1). Udgået, ikke brugt. h Version 2 (bzip2). "h" fra engelsk.  huffman kodning .
.hundred_k_blocksize otte Størrelsen af ​​den ukomprimerede datablok i hundredvis af kilobytes . 1 Et hundrede KB (100 KB). 2 To hundrede KB (200 KB). … Og så videre 9 Ni hundrede KB (900 KB).
.compressed_magic 48 0x314159265359 - konstant , tallet π , skrevet i binært kodet decimalkode (BCD).
.crc 32 Kontrolsummen beregnet for den aktuelle blok.
.randomiseret en 0 normal 1 med tilføjet tilfældighed (forældet)
.origPtr 24 start pointer til BWT -array efter konvertering
.huffman_used_map 16 bitmaskeintervaller på 16 bytes, "tilgængelig" / "mangler"
.huffman_used_bitmaps 0..256 bitmaske af anvendte tegn, "tilgængelig"/"mangler" (multiple af 16)
.huffman_groups 3 Et tal mellem 2 og 6, antallet af Huffman- borde i brug .
.selectors_used femten Et tal, der angiver, hvor mange gange Huffman- tabellen er blevet ændret (hver 50. byte).
*.selector_list 1..6 bitsekvenser polstret med nul bit (0..62) for Huffman-tabeller efter MTF (*selectors_used)
.start_huffman_length 5 0..20 initial bitlængder for Huffman deltaer
*.delta_bit_længde 1..40 0 næste tegn 1 ændre længde

{ 1=> formindsk længden med 1; 0=> øge længden med 1} (*(symboler+2)*grupper)

.indhold 2...∞ Datastrøm kodet med Huffman-tabeller. Fortsætter indtil slutningen af ​​blokken. Den maksimale længde er 7.372.800 bits .
.eos_magic 48 0x177245385090 er en konstant , kvadratroden af ​​π (sqrt(pi)) i binært kodet decimal (BCD).
.crc 32 Kontrolsum beregnet for hele strømmen.
.polstring 0..7 Ubrugte bits (0 til 7). Formål: at øge arkivstørrelsen til et multiplum af én byte (8 bit ) ( datajustering ).

Den maksimale ukomprimerede blokstørrelse for det klassiske format er 900 kilobytes . Hvis blokken består af et gentaget tegn, vil blokken efter RLE -kodning tage omkring 46 megabytes ( 45 899 236 bytes ), og efter alle operationer vil filstørrelsen .bz2være 46 bytes . Hvis den gentagne tegnkode er 251, vil filstørrelsen .bz2være 40 bytes , og komprimeringsforholdet vil være 1.147.480,9:1.

Noter

  1. bzip2 : Hjem (downlink) . Julian Seward . "Hvorfor skulle jeg bruge det? [..] Fordi det er open source (BSD-licens) og, så vidt jeg ved, patentfrit." Dato for adgang: 27. september 2008. Arkiveret fra originalen 15. februar 2012. 
  2. 1 2 https://sourceware.org/pub/bzip2/
  3. bzip2 og libbzip2 Arkiveret 25. december 2006 på Wayback Machine , "Den komprimerer typisk filer til inden for 10% til 15% af de bedste tilgængelige teknikker (PPM-familien af ​​statistiske kompressorer)"
  4. I øjeblikket er forskellige implementeringer af PAQ- metoden mest effektivt komprimeret . Brugen af ​​denne metode er dog ekstremt vanskelig på grund af lav ydeevne (komprimering kræver meget tid).
  5. Hakbeom Jang; Channoh Kim, Jae W. Lee. Praktisk spekulativ parallelisering af dekompressionsalgoritmer med variabel længde  . Konferencesprog, kompilatorer og værktøjer til indlejrede systemer 2013 (20.-21. juni 2013). - "Bzip2-filformatet definerer et 48-bit mønster kaldet magic header (0x314159265359), som signalerer begyndelsen på en ny komprimeret blok." Hentet 3. juli 2015. Arkiveret fra originalen 28. januar 2016.
  6. Dbzip2 - MediaWiki . Hentet 17. august 2018. Arkiveret fra originalen 18. august 2018.

Links