Pregunta ¿Cómo están relacionados zlib, gzip y zip? ¿Qué tienen en común y cómo son diferentes?


El algoritmo de compresión utilizado en zlib es esencialmente el mismo que en gzip y cremallera. Qué son gzip y cremallera? ¿Cómo son diferentes y cómo son ellos?


793
2017-12-24 13:48


origen


Respuestas:


Forma corta:

.zip es un formato de archivo usando, usualmente, el Desinflar el método de compresión. los .gz formato gzip es para archivos individuales, también usando el método de compresión Deflate. A menudo, gzip se usa en combinación con tar para hacer un formato de archivo comprimido, .tar.gz. los biblioteca zlib proporciona desinflar el código de compresión y descompresión para ser utilizado por zip, gzip, png (que usa el envoltura zlib sobre desinflar datos) y muchas otras aplicaciones.

Forma larga:

los Formato ZIP fue desarrollado por Phil Katz como un formato abierto con una especificación abierta, donde su implementación, PKZIP, fue shareware. Es un formato de archivo que almacena archivos y su estructura de directorio, donde cada archivo se comprime individualmente. El tipo de archivo es .zip. Los archivos, así como la estructura del directorio, se pueden encriptar opcionalmente.

El formato ZIP admite varios métodos de compresión:

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

Los métodos 1 a 7 son históricos y no están en uso. Los Métodos 9 a 98 son adiciones relativamente recientes, y están en diferentes cantidades de uso. El único método en uso realmente extendido en el formato ZIP es el método 8, Desinflary, en menor medida, el método 0, que no es compresión en absoluto. Prácticamente cada .zip El archivo que encontrarás en la naturaleza usará exclusivamente los métodos 8 y 0, probablemente solo el método 8. (El Método 8 también tiene un medio para almacenar efectivamente los datos sin compresión y relativamente poca expansión, y el Método 0 no se puede transmitir mientras que el Método 8 puede ser.)

los Norma ISO / IEC 21320-1: 2015 para contenedores de archivos es un formato zip restringido, como el utilizado en archivos de almacenamiento de Java (.jar), archivos de Office Open XML (Microsoft Office .docx, .xlsx, .pptx), archivos de formato de documento de Office (.odt, .ods, .odp), y archivos EPUB (.epub). Ese estándar limita los métodos de compresión a 0 y 8, así como a otras restricciones como el cifrado o las firmas.

Alrededor de 1990, el Grupo Info-ZIP escribió implementaciones de código abierto, gratuitas y portátiles de zip y unzip utilidades, compatibilidad de compresión con el formato Deflate y descompresión de eso y los formatos anteriores. Esto amplió en gran medida el uso del .zip formato.

A principios de los 90, el formato gzip fue desarrollado como un reemplazo para el Unix compress utilidad, derivado del código Deflate en las utilidades de Info-ZIP. Unix compress fue diseñado para comprimir un solo archivo o secuencia, añadiendo un .Z al nombre del archivo. compress usa el Algoritmo de compresión LZW, que en ese momento estaba patentada y su uso gratuito estaba en disputa entre los titulares de la patente. Aunque algunas implementaciones específicas de Deflate fueron patentadas por Phil Katz, el formato no lo era, por lo que fue posible escribir una implementación de Deflate que no infringe ninguna patente. Esa implementación no se ha visto tan cuestionada en los últimos 20 años. El Unix gziputilidad fue pensada como un reemplazo directo compress, y de hecho es capaz de descomprimir compressdatos comprimidos (suponiendo que haya podido analizar esa frase). gzip Anexa una .gz al nombre del archivo. gzip utiliza el formato de datos comprimidos Deflate, que se comprime bastante mejor que Unix compress, tiene una descompresión muy rápida y agrega un CRC-32 como una verificación de integridad para los datos. El formato del encabezado también permite el almacenamiento de más información que la compress formato permitido, como el nombre del archivo original y la hora de modificación del archivo.

Aunque compress solo comprime un solo archivo, era común usar tar utilidad para crear un archivo de archivos, sus atributos y su estructura de directorios en un único .tar archivo, y luego comprimirlo con compress hacer un .tar.Z archivo. De hecho, el tar la utilidad tenía y todavía tiene una opción para hacer la compresión al mismo tiempo, en lugar de tener que canalizar la salida de tar a compress. Todo esto llevado al formato gzip, y tar tiene una opción para comprimir directamente al .tar.gz formato. los tar.gz el formato se comprime mejor que el .zip enfoque, ya que la compresión de un .tar puede aprovechar la redundancia en los archivos, especialmente en muchos archivos pequeños. .tar.gz es el formato de archivo más común en uso en Unix debido a su muy alta portabilidad, pero también hay métodos de compresión más efectivos en uso, por lo que a menudo verá .tar.bz2 y .tar.xz archivo.

diferente a .tar, .zip tiene un directorio central al final, que proporciona una lista de los contenidos. Eso y la compresión separada proporciona acceso aleatorio a las entradas individuales en una .zip archivo. UN .tar archivo debería descomprimirse y escanearse de principio a fin para construir un directorio, que es cómo .tar el archivo está en la lista.

Poco después de la introducción de gzip, a mediados de la década de 1990, la misma disputa sobre patentes puso en tela de juicio el libre uso de .gif formato de imagen, ampliamente utilizado en los tablones de anuncios y la World Wide Web (algo nuevo en el momento). Así que un pequeño grupo creó el formato de imagen comprimido sin pérdida PNG, con tipo de archivo .png, para reemplazar .gif. Ese formato también usa el formato de desinflado para compresión, que se aplica después de que los filtros en los datos de imagen exponen más de la redundancia. Con el fin de promover el uso generalizado del formato PNG, se crearon dos bibliotecas de códigos libres. libpng y zlib. libpng manejó todas las características del formato PNG, y zlib proporcionó el código de compresión y descompresión para su uso por libpng, así como para otras aplicaciones. zlib fue adaptado de la gzip código.

Todas las patentes mencionadas han expirado.

La biblioteca zlib admite Desinflar compresión y descompresión, y tres tipos de envoltura alrededor de las corrientes desinfladas. Esos son: ningún ajuste en absoluto (desinflado "en bruto"), envoltura zlib, que se usa en los bloques de datos en formato PNG y gzip wrapping, para proporcionar rutinas gzip para el programador. La principal diferencia entre zlib y gzip wrapping es que el zlib wrapping es más compacto, seis bytes frente a un mínimo de 18 bytes para gzip, y la comprobación de integridad, Adler-32, se ejecuta más rápido que el CRC-32 que usa gzip. El desinflado sin procesar es utilizado por programas que leen y escriben .zipformato, que es otro formato que envuelve los datos comprimidos desinflados.

zlib ahora se utiliza ampliamente para la transmisión y el almacenamiento de datos. Por ejemplo, la mayoría de las transacciones HTTP de servidores y navegadores comprimen y descomprimen los datos usando zlib.

Las diferentes implementaciones de desinflado pueden dar lugar a diferentes salidas comprimidas para los mismos datos de entrada, como lo demuestra la existencia de niveles de compresión seleccionables que permiten compensar la efectividad de la compresión por el tiempo de la CPU. zlib y PKZIP no son las únicas implementaciones de desinflar compresión y descompresión. Ambos Utilidad de archivado 7-Zip y Google biblioteca zopfli tiene la capacidad de utilizar mucho más tiempo de CPU que zlib para exprimir los últimos bits posibles al usar el formato de desinflado, reduciendo los tamaños comprimidos en un pequeño porcentaje en comparación con el nivel de compresión más alto de zlib. los utilidad de pigz, una implementación paralela de gzip, incluye la opción de usar zlib (niveles de compresión 1-9) o zopfli (nivel de compresión 11), y mitiga de alguna manera el impacto del uso de zopfli al dividir la compresión de archivos grandes en procesadores y núcleos múltiples.


2077
2017-12-24 18:03



cremallera es un formato de archivo utilizado para almacenar una cantidad arbitraria de archivos y carpetas junto con la compresión sin pérdida. No hace suposiciones estrictas sobre los métodos de compresión utilizados, pero se usa con mayor frecuencia DESINFLAR.

Gzip es un algoritmo de compresión basado en DEFLATE pero menos gravado con patentes potenciales y otros, y un formato de archivo para almacenar un solo archivo comprimido. Es compatible con la compresión de una cantidad arbitraria de archivos y carpetas cuando se combina con alquitrán. El archivo resultante tiene una extensión de .tgz o .tar.gz y comúnmente se llama tarball.

zlib es una biblioteca de funciones que encapsula DEFLATE en su forma más común LZ77 encarnación.


38
2017-12-24 13:55



La diferencia más importante es que gzip solo es capaz de comprimir un solo archivo mientras comprime varios archivos uno a uno y luego los archiva en un solo archivo. Por lo tanto, gzip viene con alquitrán la mayor parte del tiempo (aunque hay otras posibilidades). Esto viene con algunas (des) ventajas.
Si tiene un archivo grande y solo necesita un archivo único, debe descomprimir todo el archivo gzip para acceder a ese archivo. Esto no es obligatorio si tienes un archivo zip.
Por otro lado, si comprimes 10 archivos similares o incluso idénticos, el archivo zip será mucho más grande porque cada archivo se comprime individualmente, mientras que en gzip en combinación con tar se comprime un único archivo, que es mucho más efectivo si los archivos son similar (igual).


24
2017-12-24 14:03