Bzip2

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 5 maj 2022; verifiering kräver 1 redigering .

bzip2
Sorts Datakomprimering
Utvecklaren Seward, Julian
Skrivet i Xi
Operativ system Programvara för flera plattformar
Första upplagan 18 juli 1996
senaste versionen
Läsbara filformat bzip2
Genererade filformat bzip2
Licens BSD-licens [1]
Hemsida sourceware.org/bzip2/

bzip2 är ett  gratis kommandoradsverktyg med öppen källkod för datakomprimering , en implementering av Burrows-Wheeler- algoritmen .

Utvecklad och först publicerad av Julian Seward i juli 1996  ( version 0.15). Kompressorns stabilitet och popularitet växte under åren, och version 1.0 publicerades i slutet av 2000 .

Effektivitet

I enlighet med UNIX-traditionen kan bzip2den bara utföra en operation åt gången: antingen komprimera eller dekomprimera, och endast för en fil. När den är komprimerad bzip2läggs tillägget " .bz2" till filnamnet. För att packa flera filer arkiveras de först till en enda fil med ett verktyg taroch komprimeras sedan med bzip2. Sådana arkiv har vanligtvis tillägget " .tar.bz2".

bzip2komprimerar de flesta filer mer effektivt, men långsammare än mer traditionella verktyg gzipeller zip. I detta avseende liknar den andra moderna komprimeringsalgoritmer.

bzip2utför datakomprimering med en betydande belastning på CPU :n (på grund av dess matematiska apparat). bzip2används om det inte finns några begränsningar för komprimeringstid och CPU- belastning , till exempel för engångspaketering av en stor mängd data.

I vissa fall är det bzip2sämre när det gäller komprimeringseffektivitet än arkiverare ( LZMA-7-Zip komprimeringsmetod ) och . Enligt författaren till programmet från 2005 är kompressionsmetoden sämre i kompressionseffektivitet med 10-15 % [3] jämfört med de bästa metoderna som var kända vid den tiden ( PPM ) [4] , men samtidigt 2 gånger snabbare i kompression och 6 gånger snabbare vid uppackning. rarbzip2

Beskrivning av algoritmen

Kompressionsmetoden bzip2fungerar så här:

Den ungefärliga blockstorleken kan väljas med kommandoradsargument (" -1" för 100 kilobyte, " -2" för 200 KB, ..., " -9" för 900 KB). Varje block komprimeras oberoende, de komprimerade blocken skrivs sekventiellt efter varandra, i början av varje används en 48-bitars sekvens - det magiska numret 0x314159265359 (i ASCII-kodning, när det är justerat till en bytegräns, visas det som " 1AY & SY"), det vill säga att skriva de första decimalsiffrorna i talet π i BCD [5] . Slutet av filen är markerad med 48-bitars konstanten 0x177245385090, vilket är kvadratroten ur pi. I början av bzip2-filer används följande rubrik: tvåbytessignaturen "BZ", sedan en indikation på entropikomprimeringsmetoden - "h" (Huffman) och blockstorleken (decimaltal från 0 till 9).

Genom att använda oberoende komprimering av enskilda block är implementeringar av parallellkomprimering eller dekompressionsformat möjliga (dekomprimering kan kräva ett offsetindex för varje block) [6] .

Användning

Användningsexempel bzip2.

# Kommando för att komprimera filen "fil" bzip2-fil # eller bzip2 --komprimera filen # Kommando för att packa upp filen "file.bz2" bzip2 -d file.bz2 # eller bzip2 --dekomprimera file.bz2 # eller bunzip2 file.bz2 # bunzip2 - kopia av bzip2 eller länk till bzip2

Kommandoradsargumenten är bzip2i princip desamma som för gzip.

# Kommando för att packa upp ett tar-arkiv komprimerat med bzip2 bzip2 -cd file.tar.bz2 | tar -xvf - # eller bzip2 --stdout --dekomprimera file.tar.bz2 \ | tar --extract --verbose --file- # Kommando för att skapa ett tar-arkiv komprimerat med bzip2 tar -cvf - filer | bzip2 -9 > file.tar.bz2 # eller tar --create --verbose --file - filer \ | bzip2 -9 > file.tar.bz2

GNU -versionen stöder flaggan " " (" "), som tillåter skapande och uppackning av " tar.bz2 "-filer utan att använda I/O-omdirigeringar ( pipeline ) . Exempel: tar-j--bzip2 

# Packa data i ett tar-arkiv och bzip2-komprimering med GNU tar tar -cvjf file.tar.bz2 list_of_files # eller tar --create --verbose --bzip2 --fil file.tar.bz2 list_of_files # Packa upp ett tar-arkiv komprimerat med bzip2 med GNU tar tar -xvjf file.tar.bz2 # eller tar --extract --verbose --bzip2 --fil file.tar.bz2

Moderna versioner av GNU tarkan automatiskt bestämma datakomprimeringsmetoden, och därför kan flaggan " -j" (" ") utelämnas. --bzip2Exempel:

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

Dessutom finns det en uppsättning verktyg för att söka, visa, återställa och jämföra data i formatet bzip2:

  • bzcat - uppackning av data och utmatning till terminalen;
  • bzmore, bzless — Uppackning av data och sida för sida utmatning till terminalen.
  • bzcmp - packa upp två filer, jämföra innehållet och rapportera resultatet: "lika" eller "inte lika";
  • bzdiff - packa upp två filer, jämföra innehållet och visa skillnaderna;
  • bzgrep, bzegrep, bzfgrep — Uppackning av data och sökning i det uppackade;
  • bzip2recover - packa upp alla block som bara kan packas upp.

Filformat

bzip2
Förlängning .bz2
Signatur BZh
Utvecklaren Seward, Julian
Senaste släppningen
Formattyp Datakomprimering
öppet format ? Ja: BSD-licens
Hemsida sourceware.org/bz... ​(  engelska)

Arkivet " .bz2" innehåller en ström ( engelsk  ström ) av komprimerad data. Ordet "ström" används eftersom data inte kan separeras logiskt och datablocken komprimeras oberoende av varandra. Den komprimerade datan består av följande fält:

  • 4 byte header;
  • noll eller fler block av komprimerad data av olika storlekar;
  • en markör som indikerar slutet av den komprimerade datan och en 32-bitars kontrollsumma (CRC) beräknad för hela strömmen;
  • några oanvända bitar för att fylla strömstorleken till ett heltal av byte.
Fält namn Fältstorlek i bitar Beskrivning
.magi 16 BZ — konstant , signatur , magiskt tal .
.version åtta En byte som kodar versionsnumret. 0 Version 1 (bzip1). Utfasad, ej använd. h Version 2 (bzip2). "h" från engelska.  huffman kodning .
.hundred_k_blocksize åtta Storleken på det okomprimerade datablocket i hundratals kilobyte . 1 Hundra KB (100 KB). 2 Tvåhundra KB (200 KB). … Och så vidare 9 Niohundra KB (900 KB).
.compressed_magic 48 0x314159265359 - konstant , talet π , skrivet i binärkodad decimalkod (BCD).
.crc 32 Kontrollsumman beräknad för det aktuella blocket.
.randomiserat ett 0 vanligt 1 med tillagd slumpmässighet (utfasad)
.origPtr 24 startpekare till BWT- array efter konvertering
.huffman_used_map 16 bitmaskintervall på 16 byte, "tillgänglig" / "saknad"
.huffman_used_bitmaps 0..256 bitmask av tecken som används, "tillgänglig"/"saknas" (multipel av 16)
.huffman_groups 3 Ett nummer mellan 2 och 6, antalet Huffman- bord som används .
.selectors_used femton En siffra som anger hur många gånger Huffman- tabellen har ändrats (var 50:e byte).
*.selector_list 1..6 bitsekvenser utfyllda med noll bitar (0..62) för Huffman-tabeller efter MTF (*selectors_used)
.start_huffman_length 5 0..20 initiala bitlängder för Huffman delta
*.delta_bit_length 1..40 0 nästa karaktär 1 ändra längd

{ 1=> minska längden med 1; 0=> öka längden med 1} (*(symboler+2)*grupper)

.innehåll 2...∞ Dataström kodad med Huffman-tabeller. Fortsätter till slutet av blocket. Den maximala längden är 7 372 800 bitar .
.eos_magic 48 0x177245385090 är en konstant , kvadratroten ur π (sqrt(pi)) i binärt kodad decimal (BCD).
.crc 32 Kontrollsumma beräknad för hela strömmen.
.stoppning 0...7 Oanvända bitar (0 till 7). Syfte: öka arkivstorleken till en multipel av en byte (8 bitar ) ( datajustering ).

Den maximala okomprimerade blockstorleken för det klassiska formatet är 900 kilobyte . Om blocket består av ett upprepat tecken, efter RLE -kodning kommer blocket att ta cirka 46 megabyte ( 45 899 236 byte ), och efter alla operationer kommer filstorleken att vara 46 byte . Om den upprepade teckenkoden är 251 kommer filstorleken att vara 40 byte och komprimeringsförhållandet blir 1 147 480,9:1. .bz2.bz2

Anteckningar

  1. bzip2 : Hem (nedlänk) . Julian Seward . "Varför skulle jag vilja använda den? [..] Eftersom det är öppen källkod (BSD-licens) och, så vitt jag vet, patentfritt." Tillträdesdatum: 27 september 2008. Arkiverad från originalet den 15 februari 2012. 
  2. 1 2 https://sourceware.org/pub/bzip2/
  3. bzip2 och libbzip2 Arkiverad 25 december 2006 på Wayback Machine , "Den komprimerar vanligtvis filer till inom 10 % till 15 % av de bästa tillgängliga teknikerna (PPM-familjen av statistiska kompressorer)"
  4. För närvarande är olika implementeringar av PAQ- metoden mest effektivt komprimerade . Användningen av denna metod är dock extremt svår på grund av låg prestanda (komprimering kräver mycket tid).
  5. Hakbeom Jang; Channoh Kim, Jae W. Lee. Praktisk spekulativ parallellisering av dekompressionsalgoritmer med variabel längd  . Konferensspråk, kompilatorer och verktyg för inbyggda system 2013 (20–21 juni 2013). - "Bzip2-filformatet definierar ett 48-bitarsmönster som kallas magic header (0x314159265359), som signalerar början av ett nytt komprimerat block." Hämtad 3 juli 2015. Arkiverad från originalet 28 januari 2016.
  6. Dbzip2 - MediaWiki . Hämtad 17 augusti 2018. Arkiverad från originalet 18 augusti 2018.

Länkar