L'algoritmo di compressione utilizzato in zlib è essenzialmente lo stesso di gzip e zip . Cosa sono gzip e zip ? Come sono diversi e come sono uguali?
L'algoritmo di compressione utilizzato in zlib è essenzialmente lo stesso di gzip e zip . Cosa sono gzip e zip ? Come sono diversi e come sono uguali?
Risposte:
Forma breve:
.zip
è un formato di archivio che utilizza, di solito, il metodo di compressione Deflate . Il .gz
formato gzip è per file singoli, anche usando il metodo di compressione Deflate. Spesso gzip viene usato in combinazione con il catrame per fare un formato di archivio compresso , .tar.gz
. La libreria zlib fornisce il codice di compressione e decompressione Deflate per l'uso da zip, gzip, png (che utilizza il wrapper zlib per deflate i dati) e molte altre applicazioni.
Forma lunga:
Il formato ZIP è stato sviluppato da Phil Katz come formato aperto con una specifica aperta, in cui la sua implementazione, PKZIP, era shareware. È un formato di archivio che memorizza i file e la loro struttura di directory, in cui ogni file viene compresso individualmente. Il tipo di file è .zip
. I file, nonché la struttura delle directory, possono essere facoltativamente crittografati.
Il formato ZIP supporta diversi metodi di compressione:
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
I metodi da 1 a 7 sono storici e non sono in uso. I metodi da 9 a 98 sono aggiunte relativamente recenti e possono variare in piccole quantità di utilizzo. L'unico metodo di uso veramente diffuso nel formato ZIP è il metodo 8, Deflate e, in misura minore, il metodo 0, che non è affatto compressione. Praticamente ogni .zip
file che incontrerai in natura utilizzerà esclusivamente i metodi 8 e 0, probabilmente solo il metodo 8. (Il metodo 8 ha anche un mezzo per archiviare efficacemente i dati senza compressione e relativamente poca espansione, e il metodo 0 non può essere trasmesso in streaming mentre il metodo 8 può essere.)
Lo standard ISO / IEC 21320-1: 2015 per i contenitori di file è un formato zip limitato, come quello utilizzato nei file di archivio Java (.jar), nei file Open XML di Office (Microsoft Office .docx, .xlsx, .pptx), Office Document Formattare file (.odt, .ods, .odp) e file EPUB (.epub). Tale standard limita i metodi di compressione a 0 e 8, nonché altri vincoli come nessuna crittografia o firma.
Intorno al 1990, il gruppo Info-ZIP ha scritto implementazioni portatili, gratuite, open source zip
e unzip
utilità, supportando la compressione con il formato Deflate e la decompressione di questo e dei formati precedenti. Ciò ha notevolmente ampliato l'uso del .zip
formato.
All'inizio degli anni '90, il formato gzip è stato sviluppato in sostituzione dell'utilità Unixcompress
, derivata dal codice Deflate nelle utility Info-ZIP. Unix è compress
stato progettato per comprimere un singolo file o flusso, aggiungendo .Z
a al nome del file. compress
utilizza l' algoritmo di compressione LZW , che all'epoca era coperto da brevetto e il suo uso gratuito era contestato dai titolari dei brevetti. Sebbene alcune implementazioni specifiche di Deflate siano state brevettate da Phil Katz, il formato no, e quindi è stato possibile scrivere un'implementazione Deflate che non ha violato alcun brevetto. Tale attuazione non è stata messa a dura prova negli ultimi 20 anni. L' gzip
utilità Unix è stata intesa come sostituto drop-incompress
e in effetti è in grado di decomprimere i compress
dati compressi (supponendo che tu sia stato in grado di analizzare quella frase). gzip
aggiunge .gz
a al nome del file. gzip
usa il formato di dati compressi Deflate, che comprime un po 'meglio di Unix compress
, ha una decompressione molto veloce e aggiunge un CRC-32 come controllo di integrità per i dati. Il formato dell'intestazione consente anche la memorizzazione di più informazioni rispetto al compress
formato consentito, come il nome del file originale e il tempo di modifica del file.
Sebbene compress
comprime solo un singolo file, era comune utilizzare l' tar
utilità per creare un archivio di file, i loro attributi e la loro struttura di directory in un singolo .tar
file e quindi comprimerlo compress
per creare un .tar.Z
file. In effetti l' tar
utilità aveva e ha ancora un'opzione per fare la compressione allo stesso tempo, invece di dover convogliare l'output di tar
a compress
. Tutto ciò è stato portato al formato gzip e tar
ha un'opzione per comprimere direttamente nel .tar.gz
formato. Il tar.gz
formato si comprime meglio .zip
dell'approccio, poiché la compressione di a .tar
può sfruttare la ridondanza tra i file, in particolare molti file di piccole dimensioni. .tar.gz
è il formato di archivio più comune in uso su Unix a causa della sua portabilità molto elevata, ma ci sono anche metodi di compressione più efficaci in uso, quindi spesso vedrai .tar.bz2
e .tar.xz
archivi.
A differenza .tar
, .zip
ha una directory centrale alla fine, che fornisce un elenco dei contenuti. Quello e la compressione separata forniscono accesso casuale alle singole voci in un .zip
file. Un .tar
file dovrebbe essere decompresso e scansionato dall'inizio alla fine per costruire una directory, che è come un .tar
file è elencato.
Poco dopo l'introduzione di gzip, verso la metà degli anni '90, la stessa disputa sui brevetti mise in discussione l'uso gratuito del .gif
formato dell'immagine, molto usato nelle bacheche e nel World Wide Web (una novità all'epoca). Quindi un piccolo gruppo ha creato il formato immagine compresso senza perdita di dati PNG, con il tipo di file .png
, per sostituirlo .gif
. Tale formato utilizza anche il formato Deflate per la compressione, che viene applicato dopo che i filtri sui dati dell'immagine hanno rivelato una maggiore ridondanza. Al fine di promuovere un uso diffuso del formato PNG, sono state create due librerie di codici gratuiti. libpng e zlib. libpng ha gestito tutte le funzionalità del formato PNG e zlib ha fornito il codice di compressione e decompressione per l'uso da parte di libpng, nonché per altre applicazioni. zlib è stato adattato dal gzip
codice.
Tutti i brevetti citati sono scaduti.
La libreria zlib supporta la compressione e la decompressione Deflate e tre tipi di avvolgimento attorno ai flussi di deflazione. Questi sono: nessun wrapping (deflate "raw"), wrapping zlib , che viene utilizzato nei blocchi di dati in formato PNG e wrapping gzip, per fornire routine gzip per il programmatore. La differenza principale tra il wrapping di zlib e gzip è che il wrapping di zlib è più compatto, sei byte contro un minimo di 18 byte per gzip e il controllo di integrità, Adler-32, viene eseguito più velocemente del CRC-32 utilizzato da gzip. Deflate grezzo viene utilizzato dai programmi che leggono e scrivono il .zip
formato, che è un altro formato che avvolge deflate i dati compressi.
zlib è ora ampiamente utilizzato per la trasmissione e l'archiviazione dei dati. Ad esempio, la maggior parte delle transazioni HTTP da server e browser comprime e decomprime i dati utilizzando zlib, in particolare l'intestazione HTTP Content-Encoding: deflate
significa deflate il metodo di compressione racchiuso nel formato dati zlib .
Diverse implementazioni di deflate possono comportare output compressi diversi per gli stessi dati di input, come evidenziato dall'esistenza di livelli di compressione selezionabili che consentono di scambiare l'efficacia della compressione per il tempo della CPU. zlib e PKZIP non sono le uniche implementazioni di decompressione e decompressione. Sia l' utilità di archiviazione 7-Zip che la libreria zopfli di Google hanno la possibilità di utilizzare molto più tempo della CPU rispetto a zlib al fine di ridurre gli ultimi bit possibili quando si utilizza il formato di deflate, riducendo le dimensioni compresse di qualche percento rispetto al massimo di zlib livello di compressione. L' utilità pigz, un'implementazione parallela di gzip, include l'opzione di utilizzare zlib (livelli di compressione 1-9) o zopfli (livello di compressione 11) e in qualche modo mitiga l'impatto temporale dell'uso di zopfli suddividendo la compressione di file di grandi dimensioni su più processori e core.
.tar.gz
file, ecco cosa sono.) In primo luogo, tar + gzip comprime meglio di zip, poiché la compressione del file successivo può usare la cronologia del file precedente (a volte indicato come un archivio "solido"). zip può comprimere i file solo individualmente. Secondo, tar conserva tutte le informazioni sulla directory di Unix, mentre zip non è stato progettato per farlo. (Le estensioni successive al formato zip con blocchi extra specifici di Unix tentano di porre rimedio a questo problema.)
ZIP è un formato di file utilizzato per archiviare un numero arbitrario di file e cartelle insieme alla compressione senza perdita. Non fa ipotesi rigide sui metodi di compressione utilizzati, ma è più frequentemente utilizzato con DEFLATE .
Gzip è sia un algoritmo di compressione basato su DEFLATE ma meno gravato da potenziali brevetti e altri, sia un formato di file per la memorizzazione di un singolo file compresso. Supporta la compressione di un numero arbitrario di file e cartelle se combinato con tar . Il file risultante ha un'estensione di .tgz
o .tar.gz
ed è comunemente chiamato tarball .
zlib è una libreria di funzioni che incapsulano DEFLATE nella sua incarnazione LZ77 più comune .
La differenza più importante è che gzip è in grado di comprimere un solo file mentre zip comprime più file uno per uno e li archivia in un singolo file in seguito. Pertanto, gzip arriva con tar la maggior parte del tempo (ci sono altre possibilità, però). Questo comporta alcuni (dis) vantaggi.
Se hai un grande archivio e ne hai bisogno solo di un singolo file, devi decomprimere l'intero file gzip per arrivare a quel file. Questo non è necessario se si dispone di un file zip.
D'altra parte, se comprimi 10 file simili o addirittura identici, l'archivio zip sarà molto più grande perché ogni file viene compresso individualmente, mentre in gzip in combinazione con tar viene compresso un singolo file che è molto più efficace se i file sono simile (uguale).