2012-04-18 23 views
5

Han buscado en google, wikied y leyendo RFC de ZIP, pero no pueden encontrar ninguna información sobre el algoritmo exacto que se utiliza en ZIP.¿Qué algoritmo está usando en ZIP estándar?

he encontrado información sobre postal == TAR + GZIP

Pero, estoy confundido por esta información.

Debido GZIP utiliza el algoritmo LZW como recuerdo y TAR utiliza LZMA, y no puedo imaginar cómo podría ser postal == TAR + GZIP (LZMA + LZW - ???)

Así podría ayudar a ser con encontrar el algoritmo de ZIP, quiero implementarlo.

+1

ZIP puede usar cualquiera de varios algoritmos. Hay una especificación en la web en alguna parte ... –

+1

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

Respuesta

7

Zip proporciona capacidades aproximadamente equivalente a la combinación de alquitrán con gzip.

tar solo recopila una serie de archivos en un solo archivo, conservando información sobre los archivos originales (por ejemplo, rutas, fechas). Contrariamente a la afirmación en la pregunta, hace sin compresión por sí mismo. gzip simplemente toma un solo archivo y lo comprime.

Zip hace ambas cosas, es decir, almacena una cantidad de archivos constituyentes en un archivo (una vez más, conserva elementos como rutas de acceso, fechas, etc.) y los comprime. A diferencia de tar + gzip, comprime cada archivo individualmente y deja sin comprimir la información del "directorio" sobre los archivos constituyentes. Esto hace que sea más fácil trabajar con archivos individuales en el archivo (insertar, eliminar, descomprimir, etc.) pero también significa que, en general, no tendrá la compresión adecuada.

En lugar de volver a implementar el algoritmo de compresión de zip, es casi seguro que es mejor descargar el código (extremadamente portátil, licencia muy liberal) desde el zlib web site. El sitio web zlib tiene un bastante razonable explanation de los algoritmos. Si realmente insiste en hacerlo usted mismo, probablemente también desee consultar RFC 1950, 1951 y 1952.

+1

Eso también es lo que [Wikipedia] (http://en.wikipedia.org/wiki/Tar_ (file_format) #Naming_of_compressed_tar_files) dice. – fb55

+1

Tenga en cuenta que zlib solo implementa la compresión/descompresión, no el mecanismo de archivo. –

+1

@HotLicks: Derecha: si quiere un código para la parte de archivo, está en el [sitio web de Info-zip] (http://www.info-zip.org). –

1

"zip" en este contexto es un formato de archivo que permite varios métodos de compresión diferentes. Incluyen deflate, deflate64, bzip2, lzma, wavpack y ppmd. En la práctica, sin embargo, casi siempre verá deflate utilizado exclusivamente en archivos zip, para compatibilidad.

deflate es también el método de compresión utilizado en gzip y por zlib, así como por el formato de imagen png.

deflate es un compresor LZ77, no LZ78.

tar es un archivador, no un compresor. Produce el formato de archivo .tar. El archivo .tar generalmente está comprimido (convenientemente por el propio programa tar llamando a programas externos) que agrega un sufijo, p. .tar.gz para compresión gzip. Las opciones tar incluyen -z para gzip, -j para bzip2 (.bz2) y -J para lzma (.xz).

No es necesario implementar el algoritmo para desinflar. Ha sido hecho para ti. Puede usar zlib en su código, que tiene una licencia muy liberal.

Cuestiones relacionadas