Comment sont liés zlib, gzip et zip? Qu’ont-ils en commun et en quoi sont-ils différents?

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 comment sont-ils les mêmes?

Forme courte:

.zip est un format d’archive utilisant généralement la méthode de compression Deflate . Le format .gz gzip est destiné aux fichiers uniques, utilisant également la méthode de compression Deflate. Souvent, gzip est utilisé en combinaison avec tar pour créer un format d’archive compressé , .tar.gz . La bibliothèque zlib fournit un code de compression et de décompression Deflate à utiliser par zip, gzip, png (qui utilise l’ encapsuleur 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 en format ouvert avec une spécification ouverte, où son implémentation, PKZIP, était un shareware. C’est 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 des répertoires, peuvent éventuellement être chiffré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. La seule méthode réellement répandue dans le format ZIP est la méthode 8, Deflate , et dans une moindre mesure la méthode 0, qui ne nécessite aucune compression. Pratiquement tous les fichiers .zip que vous rencontrerez dans la nature utiliseront exclusivement les méthodes 8 et 0, probablement uniquement la méthode 8. (La méthode 8 permet également de stocker efficacement les données sans compression et relativement peu d’expansion, et la méthode 0 ne peut pas être diffusé 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. Formater les fichiers (.odt, .ods, .odp) et les fichiers EPUB (.epub). Cette norme limite les méthodes de compression à 0 et 8, ainsi qu’à d’autres contraintes, telles que l’absence de chiffrement ou de signatures.

Vers 1990, le groupe Info-ZIP a écrit des implémentations open source, portables et gratuites de zip et unzip , prenant en charge la compression avec le format Deflate, et la décompression de ce format et des formats précédents. Cela a considérablement élargi l’utilisation du format .zip .

Au début des années 90, le format gzip a été développé en remplacement de l’ utilitaire de compress Unix , dérivé du code Deflate des utilitaires Info-ZIP. Unix compress été conçu pour compresser un seul fichier ou stream, en ajoutant un .Z au nom du fichier. compress utilise l’ algorithme de compression LZW , qui était à l’époque sous brevet et son utilisation gratuite était contestée par les détenteurs 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é aussi contestée au cours des 20 dernières années. L’utilitaire Unix gzip été conçu pour remplacer compress et est en fait capable de décompresser compress données compress (en supposant que vous ayez pu parsingr cette phrase). gzip ajoute un fichier .gz au nom du fichier. gzip utilise le format de données compressées Deflate, qui compresse un peu mieux que la compress Unix, a une décompression très rapide et ajoute un CRC-32 comme contrôle d’intégrité des données. Le format d’en-tête permet également de stocker plus d’informations que le format compress autorisé, tel que le nom du fichier d’origine et l’heure de modification du fichier.

Bien que compress ne compresse qu’un seul fichier, il était courant d’utiliser l’utilitaire tar pour créer une archive de fichiers, leurs atsortingbuts et leur structure de répertoires dans un seul fichier .tar , puis le compresser avec compress pour créer un .tar.Z Fichier .tar.Z En fait, l’utilitaire tar avait et a toujours la possibilité de faire la compression en même temps, au lieu d’avoir à compress la sortie de tar . Tout cela a été reporté au format gzip, et tar a une option pour compresser directement au format .tar.gz . Le format tar.gz compresse mieux que l’approche .zip , car la compression d’un .tar peut tirer parti de la redondance entre les fichiers, en particulier de nombreux petits fichiers. .tar.gz est le format d’archive le plus utilisé sur Unix en raison de sa portabilité très élevée, mais il existe également des méthodes de compression plus efficaces. Vous verrez donc souvent des archives .tar.bz2 et .tar.xz .

Contrairement à .tar , .zip a un répertoire central à la fin, qui fournit une liste des contenus. Cela et la compression séparée fournissent un access aléatoire aux entrées individuelles dans un fichier .zip . Un fichier .tar devrait être décompressé et analysé de bout en bout afin de créer un répertoire, ce qui correspond à la liste des fichiers .tar .

Peu de temps après l’introduction de gzip, vers le milieu des années 1990, le même litige sur les brevets remettait en cause l’utilisation gratuite du format d’image .gif , très utilisé sur les babillards et sur le World Wide Web. Ainsi, un petit groupe a créé le format d’image compressé sans perte PNG, avec le type de fichier .png , pour 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 une utilisation répandue du format PNG, deux bibliothèques de code gratuites ont été créées. libpng et zlib . libpng gère toutes les fonctionnalités du format PNG, et zlib fournit le code de compression et de décompression à utiliser par libpng, ainsi que pour d’autres applications. zlib a été adapté à partir du code gzip .

Tous les brevets mentionnés ont expiré depuis.

La bibliothèque zlib prend en charge la compression et la décompression de Deflate et trois types d’enveloppement autour des stream de dégonflage. Celles-ci sont: pas de wrapping du tout (“raw” deflate), zlib wrapping , qui est utilisé dans les blocs de données au format PNG, et gzip wrapping, pour fournir des routines gzip au programmeur. La principale différence entre zlib et gzip est que l’encapsulation zlib est plus compacte, six octets contre au moins 18 octets pour gzip, et le contrôle d’intégrité, Adler-32, est plus rapide que le CRC-32 utilisé par gzip. Le deflate brut est utilisé par les programmes qui lisent et écrivent le format .zip , qui est un autre format qui entoure les données compressées dégonflées.

zlib est maintenant largement utilisé pour la transmission et le stockage des données. Par exemple, la plupart des transactions HTTP effectuées par les serveurs et les navigateurs compressent et décompressent les données à l’aide de zlib.

Différentes implémentations de dégonflage peuvent entraîner une sortie compressée différente 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 processeur. zlib et PKZIP ne sont pas les seules implémentations de la compression et de la décompression en mode dégonflé. L’ utilitaire d’archivage 7-Zip et la bibliothèque zopfli de Google ont la possibilité d’utiliser beaucoup plus de temps processeur que zlib pour réduire les derniers bits possibles en utilisant le format dégonflé, réduisant ainsi les tailles compressées de quelques pour cent par rapport à zlib. niveau de compression L’ utilitaire pigz , une implémentation parallèle de gzip, offre la possibilité 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 divisant la compression de fichiers volumineux sur plusieurs processeurs. et des kernelx.

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 pas d’hypothèses ssortingctes 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 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 de .tgz ou .tar.gz et est communément appelé une archive tar .

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

La différence la plus importante est que gzip est seulement capable de compresser un seul fichier alors que zip compresse plusieurs fichiers un par un et les archive ensuite dans un seul fichier. Ainsi, gzip accompagne goudron 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’avez besoin que d’un seul fichier, vous devez décompresser le fichier gzip entier pour accéder à ce fichier. Cela n’est pas nécessaire si vous avez un fichier zip.
D’un autre côté, si vous compressez 10 fichiers similaires ou identiques, l’archive zip sera beaucoup plus volumineuse car chaque fichier est compressé individuellement, alors que dans gzip en combinaison avec tar, un fichier unique est beaucoup plus efficace si les fichiers sont similaire (égal).