El algoritmo de compresión utilizado en zlib es esencialmente el mismo que el de gzip y zip . ¿Qué son gzip y zip ? ¿Cómo son diferentes y cómo son iguales?
El algoritmo de compresión utilizado en zlib es esencialmente el mismo que el de gzip y zip . ¿Qué son gzip y zip ? ¿Cómo son diferentes y cómo son iguales?
Respuestas:
Forma corta:
.zip
es un formato de archivo que utiliza, generalmente, el método de compresión Deflate . El .gz
formato gzip es para archivos individuales, también usando el método de compresión Deflate. A menudo gzip se utiliza en combinación con alquitrán para hacer un formato de archivo comprimido , .tar.gz
. La biblioteca zlib proporciona un código de compresión y descompresión Deflate para usar con zip, gzip, png (que usa el contenedor zlib en los datos desinflados) y muchas otras aplicaciones.
Forma larga:
El 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 directorios, donde cada archivo se comprime individualmente. El tipo de archivo es .zip
. Los archivos, así como la estructura del directorio, opcionalmente se pueden cifrar.
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 se usan en cantidades pequeñas y variables. El único método de uso realmente extendido en el formato ZIP es el método 8, Deflate , y en cierta medida el método 0, que no es compresión alguna. Prácticamente todos los .zip
archivos que encontrará en la naturaleza utilizarán 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 puede transmitirse mientras que el método 8 puede ser).
El estándar ISO / IEC 21320-1: 2015 para contenedores de archivos es un formato zip restringido, como el que se usa en archivos de archivo Java (.jar), archivos Open Office XML (Microsoft Office .docx, .xlsx, .pptx), documento de Office Formatear archivos (.odt, .ods, .odp) y archivos EPUB (.epub). Ese estándar limita los métodos de compresión a 0 y 8, así como otras restricciones, como la falta de cifrado o firmas.
Alrededor de 1990, el grupo Info-ZIP escribió implementaciones zip
y unzip
utilidades portátiles, gratuitas y de código abierto , apoyando la compresión con el formato Deflate y la descompresión de ese y los formatos anteriores. Esto amplió enormemente el uso del .zip
formato.
A principios de los 90, el formato gzip se desarrolló como un reemplazo para la utilidad Unixcompress
, derivada del código Deflate en las utilidades Info-ZIP. Unix compress
fue diseñado para comprimir un solo archivo o secuencia, agregando un .Z
al nombre del archivo. compress
utiliza el algoritmo de compresión LZW , que en ese momento estaba bajo patente y su uso gratuito estaba en disputa por los titulares de la patente. Aunque algunas implementaciones específicas de Deflate fueron patentadas por Phil Katz, el formato no fue así, por lo que fue posible escribir una implementación de Deflate que no infringiera ninguna patente. Esa implementación no ha sido tan cuestionada en los últimos 20 años. La gzip
utilidad Unix fue pensada como un reemplazo directo paracompress
y, de hecho, puede descomprimir compress
datos comprimidos (suponiendo que haya podido analizar esa oración). gzip
agrega .gz
a al nombre del archivo. gzip
usa el formato de datos comprimidos Deflate, que 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 el 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 la tar
utilidad para crear un archivo de archivos, sus atributos y su estructura de directorios en un solo .tar
archivo, y luego comprimirlo compress
para crear un .tar.Z
archivo. De hecho, la tar
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. El tar.gz
formato se comprime mejor que el .zip
enfoque, ya que la compresión de un .tar
puede aprovechar la redundancia entre archivos, especialmente muchos archivos pequeños. .tar.gz
es el formato de archivo más común en uso en Unix debido a su 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
archivará.
A diferencia .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 un .zip
archivo. Un .tar
archivo tendría que descomprimirse y analizarse de principio a fin para crear un directorio, que es cómo .tar
se enumera un archivo.
Poco después de la introducción de gzip, a mediados de la década de 1990, la misma disputa de patentes puso en tela de juicio el uso gratuito del .gif
formato de imagen, muy utilizado en los tableros de anuncios y en la World Wide Web (algo nuevo en ese momento). Entonces, un pequeño grupo creó el formato de imagen comprimido sin pérdida PNG, con el tipo de archivo .png
, para reemplazar .gif
. Ese formato también usa el formato Deflate para la compresión, que se aplica después de que los filtros en los datos de la imagen exponen más de la redundancia. Para promover el uso generalizado del formato PNG, se crearon dos bibliotecas de código gratuitas. 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 el uso de libpng, así como para otras aplicaciones. zlib fue adaptado del gzip
código.
Todas las patentes mencionadas han expirado desde entonces.
La biblioteca zlib admite la compresión y descompresión de desinflado, y tres tipos de envoltura alrededor de las secuencias de desinflado. Esos son: sin envoltura (desinflado "en bruto"), envoltura zlib , que se utiliza en los bloques de datos en formato PNG, y envoltura gzip, para proporcionar rutinas gzip para el programador. La principal diferencia entre la envoltura zlib y gzip es que la envoltura zlib es más compacta, seis bytes frente a un mínimo de 18 bytes para gzip, y la verificación de integridad, Adler-32, se ejecuta más rápido que el CRC-32 que usa gzip. La desinflación sin .zip
formato es utilizada por programas que leen y escriben el formato, que es otro formato que envuelve los datos comprimidos desinflados.
zlib ahora se usa ampliamente para la transmisión y almacenamiento de datos. Por ejemplo, la mayoría de las transacciones HTTP realizadas por servidores y navegadores comprimen y descomprimen los datos usando zlib, específicamente el encabezado HTTP Content-Encoding: deflate
significa desinflar el método de compresión dentro del formato de datos zlib .
Las diferentes implementaciones de desinflado pueden dar como resultado una salida comprimida diferente 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 tiempo de CPU. zlib y PKZIP no son las únicas implementaciones de compresión y descompresión desinfladas. Tanto la utilidad de archivo 7-Zip como la biblioteca zopfli de Google tienen la capacidad de usar 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 más alto de zlib nivel de compresión. La utilidad 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 de alguna manera mitiga el impacto temporal del uso de zopfli al dividir la compresión de archivos grandes en múltiples procesadores y núcleos.
.tar.gz
archivos, eso es lo que son). Primero, tar + gzip comprime mejor que zip, ya que la compresión del siguiente archivo puede usar el historial del archivo anterior (a veces denominado archivo "sólido"). zip solo puede comprimir archivos individualmente. En segundo lugar, tar conserva toda la información del directorio Unix, mientras que zip no fue diseñado para hacerlo. (Las extensiones posteriores al formato zip con bloques adicionales específicos de Unix intentan solucionar este problema.)
ZIP es un formato de archivo utilizado para almacenar un número arbitrario de archivos y carpetas junto con una compresión sin pérdidas. No hace suposiciones estrictas sobre los métodos de compresión utilizados, pero se usa con mayor frecuencia con DEFLATE .
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. Admite comprimir una cantidad arbitraria de archivos y carpetas cuando se combina con tar . 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 encarnación LZ77 más común .
La diferencia más importante es que gzip solo es capaz de comprimir un solo archivo, mientras que zip comprime varios archivos uno por uno y luego los archiva en un solo archivo. Por lo tanto, gzip viene junto con el alquitrán la mayor parte del tiempo (aunque hay otras posibilidades). Esto viene junto con algunas (des) ventajas.
Si tiene un archivo grande y solo necesita un solo archivo, debe descomprimir todo el archivo gzip para acceder a ese archivo. Esto no es obligatorio si tiene un archivo zip.
Por otro lado, si comprime 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 solo archivo, que es mucho más efectivo si los archivos son similar (igual).