2012-04-18 32 views
5

Sono stati cercati su google, letti e lettura RFC di ZIP, ma non riesco a trovare alcuna informazione sull'algoritmo esatto utilizzato in ZIP.Quale algoritmo sta usando nello standard ZIP?

ho trovato informazioni ZIP == TAR + GZIP

Ma, io sono confuso da queste informazioni.

Perché GZIP utilizza l'algoritmo LZW come ricordo e TAR utilizza in LZMA, e non riesco a immaginare come potrebbe essere ZIP == TAR + GZIP (LZMA + LZW - ???)

Quindi potrebbe essere aiutate con la ricerca dell'algoritmo di ZIP, voglio implementarlo.

+1

ZIP può utilizzare uno qualsiasi dei numerosi algoritmi. C'è una specifica che gira sul web da qualche parte ... –

+1

Ah, [eccolo qui] (http://www.pkware.com/documents/casestudies/APPNOTE.TXT): Deflate, Deflate64, Implode, BZIP2, LZMA, o PPMd +. –

risposta

7

Zip fornisce capacità approssimativamente equivalente alla combinazione di tar con gzip.

tar raccoglie semplicemente un numero di file insieme in un singolo file, preservando le informazioni sui file originali (ad es. Percorsi, date). Contrariamente alla dichiarazione nella domanda, lo fa no compressione da solo. gzip prende solo un singolo file e lo comprime.

Zip fa entrambi quelli - cioè, memorizza un numero di file costituenti in un archivio (di nuovo, preservando cose come percorsi, date, ecc.) E li comprime. A differenza di tar + gzip, comprime ciascun file singolarmente e lascia le informazioni "directory" sui file costitutivi non compressi. Ciò semplifica il lavoro con i singoli file nell'archivio (inserire, eliminare, decomprimere, ecc.) Ma significa anche che di solito non sarà complessivamente buono per la compressione.

Invece di ri-implementare l'algoritmo di compressione di zip, è quasi certamente meglio scaricare il codice (licenza estremamente portatile e molto liberale) dallo zlib web site. Il sito web di zlib ha un ragionevole explanation algoritmi. Se davvero insisti a farlo da te, probabilmente vorrai anche guardare RFC 1950, 1951 e 1952.

+1

Questo è anche ciò che [Wikipedia] (http://en.wikipedia.org/wiki/Tar_ (file_formato) #Naming_of_compressed_tar_files) dice. – fb55

+1

Si noti che zlib implementa solo la compressione/decompressione, non il meccanismo di archiviazione. –

+1

@HotLicks: a destra: se si desidera il codice per la parte di archiviazione, questo è il [sito Web Info-zip] (http://www.info-zip.org). –

1

"zip" in questo contesto è un formato di file che consente diversi metodi di compressione. Includono deflate, deflate64, bzip2, lzma, wavpack e ppmd. In pratica tuttavia, quasi sempre vedrai deflate usato esclusivamente nei file zip, per compatibilità.

deflate è anche il metodo di compressione utilizzato in gzip e da zlib, nonché dal formato immagine png.

deflate è un compressore LZ77, non LZ78.

tar è un archiviatore, non un compressore. Produce il formato di file .tar. Il file .tar è solitamente compresso (convenientemente dal programma tar che chiama i programmi esterni) che aggiunge un suffisso, ad es. .tar.gz per la compressione gzip. le opzioni tar includono -z per gzip, -j per bzip2 (.bz2) e -J per lzma (.xz).

Non è necessario implementare l'algoritmo per deflate. È stato fatto per te Puoi usare zlib nel tuo codice, che ha una licenza molto liberale.