Komprimeringsalgoritmen som brukes i zlib er i hovedsak den samme som i gzip og zip. Hva er gzip og zip? Hvordan er de forskjellige og hvordan er de like?
Kortform: .zip
ved hjelp av Deflate-komprimeringsmetoden.
.zip
er et arkivformat som vanligvis bruker Deflate-komprimeringsmetoden. Gzip-formatet .gz
er for enkeltfiler, og bruker også Deflate-komprimeringsmetoden. Ofte brukes gzip i kombinasjon med tar for å lage et komprimert arkivformat, .tar.gz
. Zlib-biblioteket]5 tilbyr Deflate-komprimerings- og dekomprimeringskode for bruk av zip, gzip, png (som bruker zlib wrapper på deflate-data) og mange andre applikasjoner.
Lang form:_.
ZIP-formatet]1 ble utviklet av Phil Katz som et åpent format med en åpen spesifikasjon, der hans implementering, PKZIP, var shareware. Det er et arkivformat som lagrer filer og deres katalogstruktur, der hver fil komprimeres individuelt. Filtypen er .zip
. Filene, så vel som katalogstrukturen, kan eventuelt krypteres.
ZIP-formatet støtter flere komprimeringsmetoder:
0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1
Metodene 1 til 7 er historiske og er ikke i bruk. Metodene 9 til 98 er relativt nye, og brukes i varierende, liten grad. Den eneste metoden i virkelig utbredt bruk i ZIP-formatet er metode 8, Deflate, og i noe mindre grad metode 0, som ikke er noen komprimering i det hele tatt. Praktisk talt alle .zip
-filer som du vil komme over i naturen, vil utelukkende bruke metodene 8 og 0, sannsynligvis bare metode 8. (Metode 8 har også en metode for effektiv lagring av data uten komprimering og med relativt liten utvidelse, og metode 0 kan ikke strømmes, mens metode 8 kan).
ISO/IEC 21320-1:2015-standarden for filcontainere]8 er et begrenset zip-format, for eksempel brukt i Java-arkivfiler (.jar), Office Open XML-filer (Microsoft Office .docx, .xlsx, .pptx), Office Document Format-filer (.odt, .ods, .odp) og EPUB-filer (.epub). Denne standarden begrenser komprimeringsmetodene til 0 og 8, samt andre begrensninger som ingen kryptering eller signaturer.
Rundt 1990 skrev Info-ZIP-gruppen bærbare, gratis implementeringer med åpen kildekode av zip
- og unzip
-verktøy som støttet komprimering med Deflate-formatet og dekomprimering av dette og tidligere formater. Dette utvidet bruken av .zip
-formatet kraftig.
På begynnelsen av 90-tallet ble gzip-formatet utviklet som en erstatning for Unix compress
-verktøyet, avledet fra Deflate-koden i Info-ZIP-verktøyene. Unix compress
ble utviklet for å komprimere en enkelt fil eller strøm ved å legge til en .Z
til filnavnet. compress bruker LZW-komprimeringsalgoritmen, som på den tiden var patentert, og den frie bruken av den var omstridt av patentinnehaverne. Selv om noen spesifikke implementeringer av Deflate var patentert av Phil Katz, var ikke formatet det, og det var derfor mulig å skrive en Deflate-implementering som ikke krenket noen patenter. Denne implementeringen har ikke blitt så utfordret de siste 20+ årene. Unix gzip
-verktøyet var ment som en drop-in erstatning for compress
, og er faktisk i stand til å dekomprimere compress
-komprimerte data (forutsatt at du var i stand til å analysere den setningen). gzip
legger til en .gz
til filnavnet. gzip
bruker Deflate-komprimert dataformat, som komprimerer ganske mye bedre enn Unix compress
, har veldig rask dekomprimering og legger til en CRC-32 som en integritetskontroll for dataene. Header-formatet tillater også lagring av mer informasjon enn det compress
-formatet tillater, for eksempel det opprinnelige filnavnet og filendringstidspunktet.
Selv om compress
bare komprimerer en enkelt fil, var det vanlig å bruke tar
-verktøyet til å lage et arkiv av filer, deres attributter og katalogstruktur i en enkelt .tar
-fil, og deretter komprimere den med compress
for å lage en .tar.Z
-fil. Faktisk hadde og har tar
-verktøyet et alternativ for å gjøre komprimeringen samtidig, i stedet for å måtte sende utdataene fra tar
til compress
. Alt dette ble overført til gzip-formatet, og tar
har et alternativ for å komprimere direkte til .tar.gz
-formatet. Formatet tar.gz
komprimerer bedre enn .zip
-tilnærmingen, siden komprimeringen av en .tar
kan dra nytte av redundans på tvers av filer, spesielt mange små filer. .tar.gzer det vanligste arkivformatet i bruk på Unix på grunn av sin svært høye portabilitet, men det finnes også mer effektive komprimeringsmetoder i bruk, så du vil ofte se
.tar.bz2og
.tar.xzarkiver. I motsetning til
.tarhar
.zipen sentral katalog på slutten, som gir en liste over innholdet. Dette og den separate komprimeringen gir tilfeldig tilgang til de enkelte oppføringene i en
.zip-fil. En
.tar-fil må dekomprimeres og skannes fra start til slutt for å lage en katalog, slik en
.tar-fil er oppført. Kort tid etter innføringen av gzip, rundt midten av 1990-tallet, satte den samme patenttvisten spørsmålstegn ved den frie bruken av bildeformatet .gif, som var svært utbredt på oppslagstavler og World Wide Web (noe som var nytt på den tiden). Så en liten gruppe skapte det tapsfritt komprimerte bildeformatet PNG, med filtypen
.png, for å erstatte
.gif. Dette formatet bruker også Deflate-formatet for komprimering, som brukes etter at filtre på bildedataene avslører mer av redundansen. For å fremme utbredt bruk av PNG-formatet ble det opprettet to gratis kodebiblioteker. [libpng][12] og [zlib][5]. libpng håndterte alle funksjonene i PNG-formatet, og zlib ga komprimerings- og dekomprimeringskoden for bruk av libpng, samt for andre applikasjoner. zlib ble tilpasset fra
gzip-koden. Alle de nevnte patentene er siden utløpt. Zlib-biblioteket støtter deflate-komprimering og dekomprimering, og tre typer innpakning rundt deflate-strømmene. Disse er: ingen wrapping i det hele tatt ("raw" deflate), [zlib wrapping][7], som brukes i PNG-formatets datablokker, og gzip wrapping, for å gi gzip-rutiner for programmereren. Hovedforskjellen mellom zlib og gzip wrapping er at zlib wrapping er mer kompakt, seks byte mot minimum 18 byte for gzip, og integritetskontrollen, Adler-32, kjører raskere enn CRC-32 som gzip bruker. Raw deflate brukes av programmer som leser og skriver
.zip`-formatet, som er et annet format som omslutter deflate-komprimerte data.
zlib er nå i utstrakt bruk for overføring og lagring av data. For eksempel komprimerer og dekomprimerer de fleste HTTP-transaksjoner fra servere og nettlesere dataene ved hjelp av zlib.
Ulike implementeringer av deflate kan resultere i forskjellige komprimerte utdata for de samme inndataene, noe som fremgår av eksistensen av valgbare komprimeringsnivåer som gjør det mulig å bytte komprimeringseffektivitet mot CPU-tid. zlib og PKZIP er ikke de eneste implementeringene av deflatekomprimering og dekomprimering. Både 7-Zip-arkiveringsverktøyet og Googles zopfli-bibliotek har muligheten til å bruke mye mer CPU-tid enn zlib for å skvise ut de siste bitene som er mulig ved bruk av deflateformatet, noe som reduserer komprimerte størrelser med noen få prosent sammenlignet med zlibs høyeste komprimeringsnivå. Pigz-verktøyet]15, en parallell implementering av gzip, inkluderer muligheten til å bruke zlib (komprimeringsnivå 1-9) eller zopfli (komprimeringsnivå 11), og reduserer noe tidseffekten av å bruke zopfli ved å dele komprimeringen av store filer over flere prosessorer og kjerner.
ZIP er et filformat som brukes til å lagre et vilkårlig antall filer og mapper sammen med tapsfri komprimering. Det stiller ingen strenge krav til komprimeringsmetodene som brukes, men brukes oftest sammen med DEFLATE.
Gzip er både en komprimeringsalgoritme basert på DEFLATE, men mindre belastet med potensielle patenter og lignende, og et filformat for lagring av en enkelt komprimert fil. Den støtter komprimering av et vilkårlig antall filer og mapper når den kombineres med tar. Den resulterende filen har filtypen .tgz
eller .tar.gz
og kalles vanligvis en tarball.
zlib er et bibliotek med funksjoner som innkapsler DEFLATE i sin vanligste LZ77 inkarnasjon.
Den viktigste forskjellen er at gzip bare er i stand til å komprimere en enkelt fil, mens zip komprimerer flere filer en etter en og arkiverer dem i en enkelt fil etterpå. Dermed kommer gzip sammen med tar mesteparten av tiden (det finnes imidlertid andre muligheter). Dette kommer sammen med noen (dis)fordeler.
Hvis du har et stort arkiv og bare trenger én enkelt fil fra det, må du dekomprimere hele gzip-filen for å komme til den filen. Dette er ikke nødvendig hvis du har en zip-fil.
På den annen side, hvis du komprimerer 10 lignende eller til og med identiske filer, vil zip-arkivet bli mye større fordi hver fil komprimeres individuelt, mens i gzip i kombinasjon med tar komprimeres en enkelt fil, noe som er mye mer effektivt hvis filene er like (like).