Quel est le lien entre zlib, gzip et zip? Qu'ont-ils en commun et en quoi sont-ils différents?

948

L'algorithme de compression utilisé dans zlib est essentiellement le même que celui de gzip et zip . Que sont gzip et zip ? En quoi sont-ils différents et en quoi sont-ils identiques?

Abhishek Jain
la source

Réponses:

2476

Forme courte:

.zipest un format d'archive utilisant, généralement, la méthode de compression Deflate . Le .gzformat gzip est destiné aux fichiers uniques, utilisant également la méthode de compression Deflate. Souvent , on utilise gzip en combinaison avec le goudron pour faire un format archive compressée , .tar.gz. La bibliothèque zlib fournit le code de compression et de décompression Deflate à utiliser par zip, gzip, png (qui utilise le wrapper zlib sur les données de dégonflage) et de nombreuses autres applications.

Forme longue:

Le format ZIP a été développé par Phil Katz comme un format ouvert avec une spécification ouverte, où son implémentation, PKZIP, était un shareware. Il s'agit d'un format d'archive qui stocke les fichiers et leur structure de répertoires, où chaque fichier est compressé individuellement. Le type de fichier est .zip. Les fichiers, ainsi que la structure du répertoire, peuvent éventuellement être cryptés.

Le format ZIP prend en charge plusieurs méthodes de compression:

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

Les méthodes 1 à 7 sont historiques et ne sont pas utilisées. Les méthodes 9 à 98 sont des ajouts relativement récents et leur utilisation est variable et limitée. La seule méthode vraiment répandue au format ZIP est la méthode 8, Deflate , et dans une moindre mesure la méthode 0, qui n'est pas du tout compressée. Presque tous les .zipfichiers que vous rencontrerez dans la nature utiliseront exclusivement les méthodes 8 et 0, probablement uniquement la méthode 8. (La méthode 8 a également un moyen de stocker efficacement les données sans compression et relativement peu d'expansion, et la méthode 0 ne peut pas être diffusée en continu alors que la méthode 8 peut l'être.)

La norme ISO / IEC 21320-1: 2015 pour les conteneurs de fichiers est un format zip restreint, tel que celui utilisé dans les fichiers d'archive Java (.jar), les fichiers Office Open XML (Microsoft Office .docx, .xlsx, .pptx), Office Document Formatez les fichiers (.odt, .ods, .odp) et les fichiers EPUB (.epub). Cette norme limite les méthodes de compression à 0 et 8, ainsi que d'autres contraintes telles que l'absence de chiffrement ou de signatures.

Vers 1990, le groupe Info-ZIP a écrit des implémentations zipet des unziputilitaires portables, gratuits et open source , prenant en charge la compression au format Deflate et la décompression de celui-ci et des formats antérieurs. Cela a considérablement étendu l'utilisation du .zipformat.

Au début des années 90, le format gzip a été développé en remplacement de l' utilitaire Unixcompress , dérivé du code Deflate dans les utilitaires Info-ZIP. Unix a compressété conçu pour compresser un seul fichier ou flux, en ajoutant un .Zau nom du fichier. compressutilise l' algorithme de compression LZW , qui à l'époque était sous brevet et sa libre utilisation était contestée par les titulaires de brevets. Bien que certaines implémentations spécifiques de Deflate aient été brevetées par Phil Katz, le format ne l'était pas, et il était donc possible d'écrire une implémentation Deflate qui ne violait aucun brevet. Cette mise en œuvre n'a pas été autant contestée au cours des 20 dernières années et plus. L' gziputilitaire Unix a été conçu comme un remplacement direct pourcompress, et est en fait capable de décompresser des compressdonnées compressées (en supposant que vous avez pu analyser cette phrase). gzipajoute un .gzau nom du fichier. gziputilise le format de données compressées Deflate, qui se comprime un peu mieux qu'Unix compress, a une décompression très rapide et ajoute un CRC-32 pour vérifier l'intégrité des données. Le format d'en-tête permet également de stocker plus d'informations que le compressformat autorisé, comme le nom de fichier d'origine et l'heure de modification du fichier.

Bien que compressne comprime qu'un seul fichier, il était courant d'utiliser l' tarutilitaire pour créer une archive de fichiers, leurs attributs et leur structure de répertoires dans un seul .tarfichier, puis de le compresser avec compresspour créer un .tar.Zfichier. En fait, l' tarutilitaire avait et a toujours la possibilité de faire la compression en même temps, au lieu de devoir diriger la sortie de tarvers compress. Tout cela a été reporté au format gzip, et tara une option pour compresser directement au .tar.gzformat. Le tar.gzformat se comprime mieux que l' .zipapproche, car la compression d'un .tarpeut tirer parti de la redondance entre les fichiers, en particulier de nombreux petits fichiers. .tar.gzest le format d'archivage le plus couramment utilisé sous Unix en raison de sa très grande portabilité, mais il existe également des méthodes de compression plus efficaces, donc vous verrez .tar.bz2et .tar.xzarchiverez souvent .

Contrairement à .tar, .zipa un répertoire central à la fin, qui fournit une liste du contenu. Cela et la compression séparée fournissent un accès aléatoire aux entrées individuelles dans un .zipfichier. Un .tarfichier devrait être décompressé et analysé du début à la fin afin de créer un répertoire, c'est ainsi qu'un .tarfichier est répertorié.

Peu de temps après l'introduction de gzip, vers le milieu des années 1990, le même litige en matière de brevets remettait en cause la libre utilisation du .gifformat d'image, très répandu sur les tableaux d'affichage et le World Wide Web (une nouveauté à l'époque). Un petit groupe a donc créé le format d'image compressé sans perte PNG, avec le type de fichier .png, à remplacer .gif. Ce format utilise également le format Deflate pour la compression, qui est appliqué après que les filtres sur les données d'image exposent davantage la redondance. Afin de promouvoir l'utilisation généralisée du format PNG, deux bibliothèques de code gratuites ont été créées. libpng et zlib. libpng a géré toutes les fonctionnalités du format PNG, et zlib a fourni le code de compression et de décompression à utiliser par libpng, ainsi que pour d'autres applications. zlib a été adapté du gzipcode.

Tous les brevets mentionnés ont expiré depuis.

La bibliothèque zlib prend en charge la compression et la décompression Deflate, et trois types d'enroulement autour des flux de dégonflage. Ce sont: aucun habillage du tout (dégonflage "brut"), habillage zlib , qui est utilisé dans les blocs de données au format PNG, et habillage gzip, pour fournir des routines gzip pour le programmeur. La principale différence entre le zlib et le gzip wrapping est que le zlib wrapping est plus compact, six octets contre un minimum de 18 octets pour gzip, et le contrôle d'intégrité, Adler-32, s'exécute plus rapidement que le CRC-32 que gzip utilise. Le dégonflage brut est utilisé par les programmes qui lisent et écrivent le .zipformat, qui est un autre format qui entoure le dégonflage des données compressées.

zlib est désormais largement utilisé pour la transmission et le stockage de données. Par exemple, la plupart des transactions HTTP par les serveurs et les navigateurs compressent et décompressent les données à l'aide de zlib, en particulier l'en-tête HTTP Content-Encoding: deflatesignifie la méthode de compression dégonfler enveloppée dans le format de données zlib .

Différentes implémentations de dégonflage peuvent entraîner des sorties compressées différentes pour les mêmes données d'entrée, comme en témoigne l'existence de niveaux de compression sélectionnables qui permettent de compenser l'efficacité de la compression pour le temps CPU. zlib et PKZIP ne sont pas les seules implémentations de compression et décompression de dégonflage. L' utilitaire d'archivage 7-Zip et la bibliothèque zopfli de Google ont tous deux la possibilité d'utiliser beaucoup plus de temps processeur que zlib afin d'extraire les derniers bits possibles lors de l'utilisation du format de dégonflage, ce qui réduit les tailles compressées de quelques pour cent par rapport au plus élevé de zlib niveau de compression. L' utilitaire pigz, une implémentation parallèle de gzip, inclut l'option d'utiliser zlib (niveaux de compression 1 à 9) ou zopfli (niveau de compression 11), et atténue quelque peu l'impact temporel de l'utilisation de zopfli en répartissant la compression de fichiers volumineux sur plusieurs processeurs et cœurs.

Mark Adler
la source
113
Ce message est tellement chargé d'histoire et d'informations que j'ai l'impression que certaines citations doivent être ajoutées au cas où les gens essaient de faire référence à ce message comme source d'information. Bien que si cette information se reflète quelque part avec des citations comme Wikipedia, un lien vers un tel travail cité similaire serait apprécié.
ThorSummoner
1348
Je suis la référence, ayant fait partie de tout cela. Cet article pourrait être cité dans Wikipedia comme source originale.
Mark Adler
524
Pour info: Mark Adler est un ingénieur logiciel américain et a été fortement impliqué dans l'exploration spatiale. Il est surtout connu pour son travail dans le domaine de la compression de données en tant qu'auteur de la fonction de somme de contrôle Adler-32 et co-auteur de la bibliothèque de compression zlib et de gzip. Il a contribué à Info-ZIP et a participé au développement du format d'image Portable Network Graphics (PNG). Adler était également le Spirit Cruise Mission Manager pour la mission Mars Exploration Rover. (wikipedia)
Isaac Hanson
99
gzip a été créé pour remplacer la compresse Unix. zip n'est pas supérieur à tar + gzip sur Unix, pour plusieurs raisons. (Quand vous voyez des .tar.gzfichiers, c'est ce qu'ils sont.) Premièrement, tar + gzip compresse mieux que zip, car la compression du fichier suivant peut utiliser l'historique du fichier précédent (parfois appelé archive "solide"). zip ne peut compresser les fichiers individuellement. Deuxièmement, tar conserve toutes les informations du répertoire Unix, alors que zip n'a pas été conçu pour cela. (Les extensions ultérieures au format zip avec des blocs supplémentaires spécifiques à Unix tentent de résoudre ce problème.)
Mark Adler
85
Vous semblez confondre les formats avec l'implémentation. L' implémentation 7-Zip du format de dégonflage peut obtenir quelque chose comme votre compression citée de 2% à 10% meilleure que gzip avec le même format de dégonflage (tout en prenant beaucoup plus de temps CPU pour le faire). Les 7z LZMA2 Format offres de l'ordre de 40% une meilleure compression.
Mark Adler
43

ZIP est un format de fichier utilisé pour stocker un nombre arbitraire de fichiers et de dossiers avec une compression sans perte. Il ne fait aucune hypothèse stricte sur les méthodes de compression utilisées, mais est le plus souvent utilisé avec DEFLATE .

Gzip est à la fois un algorithme de compression basé sur DEFLATE mais moins encombré de brevets potentiels et al, et un format de fichier pour stocker un seul fichier compressé. Il prend en charge la compression d'un nombre arbitraire de fichiers et de dossiers lorsqu'il est combiné avec tar . Le fichier résultant a une extension .tgzou .tar.gzest communément appelé tarball .

zlib est une bibliothèque de fonctions encapsulant DEFLATE dans son incarnation LZ77 la plus courante .

Niels Keurentjes
la source
28

La différence la plus importante est que gzip n'est capable de compresser qu'un seul fichier tandis que zip compresse plusieurs fichiers un par un et les archive ensuite dans un seul fichier. Ainsi, gzip est fourni avec tar la plupart du temps (il existe cependant d'autres possibilités). Cela s'accompagne de certains (dés) avantages.

Si vous avez une grande archive et que vous n'en avez besoin que d'un seul fichier, vous devez décompresser tout le fichier gzip pour y accéder. Ce n'est pas obligatoire si vous avez un fichier zip.

D'un autre côté, si vous compressez 10 fichiers similaires ou même identiques, l'archive zip sera beaucoup plus grande car chaque fichier est compressé individuellement, alors qu'en gzip en combinaison avec tar un seul fichier est compressé ce qui est beaucoup plus efficace si les fichiers sont similaire (égal).

Tim Zimmermann
la source
8
Vous exagérez le point. Si les gens voulaient des archives compressées à accès aléatoire, ils pouvaient créer des fichiers ".gz.tar" au lieu de fichiers ".tar.gz". Ce n'est pas le cas, car la plupart des gens ne sont pas très intéressés par l'accès aléatoire. Il existe une grande communauté autour du format d'archivage Web .warc.gz, et ils ont besoin d'un accès aléatoire, ils compressent donc chaque page Web séparément. Vous utilisez ce format chaque fois que vous consultez une page Web dans Internet Archive Wayback Machine.
Greg Lindahl
2
".gz.tar" n'offre pas d'accès aléatoire car le format tar n'est pas capable d'accéder aléatoirement à ses entrées. Vous devez parcourir toutes les entrées depuis le début pour obtenir une entrée spécifique souhaitée, pire encore: vous devez parcourir toutes les entrées jusqu'à la fin car le même fichier peut être archivé plusieurs fois (dans plusieurs versions) à plusieurs endroits dans la même archive - et il n'y a aucun moyen de le comprendre, sauf pour lire l'intégralité de l'archive entrée par entrée.
Min-Soo Pipefeet