web-dev-qa-db-fra.com

Quel est le lien entre 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 utilisé dans gzip et Zip. Que sont gzip et Zip? Comment sont-ils différents et comment sont-ils les mêmes?

904
Abhishek Jain

Forme abrégée:

.Zip est un format d'archive en utilisant généralement la méthode de compression Deflate . Le .gz gzip format est destiné aux fichiers uniques, utilisant également la méthode de compression Deflate. Gzip est souvent utilisé en combinaison avec tar crée un format d'archive compressé , .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 déflates), et beaucoup d'autres applications.

Forme longue:

Le format Zip a été développé par Phil Katz en tant que 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 de répertoires, 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. La seule méthode réellement utilisée 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 utilisent 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 avec relativement peu de développement, et La méthode 0 ne peut pas être diffusée alors que la méthode 8 peut l'être.)

Le norme ISO/IEC 21320-1: 2015 pour les conteneurs de fichiers est un format Zip restreint, utilisé par exemple dans les fichiers d'archivage Java (.jar), les fichiers Office Open XML (Microsoft Office .docx, .xlsx, .pptx), fichiers au format de document Office (.odt, .ods, .odp) et 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 signature.

Vers 1990, les groupe Info-Zip écrivirent des implémentations portables, gratuites et à code source ouvert des outils Zip et unzip, prenant en charge la compression au format Deflate et leur décompression, ainsi que le formats antérieurs. Cela a considérablement étendu l'utilisation du format .Zip.

Au début des années 90, le format gzip a été développé pour remplacer l'utilitaire nix compress] , dérivé du code Deflate des utilitaires Info-Zip. Unix compress a été conçu pour compresser un fichier ou un flux unique, en ajoutant un .Z au nom du fichier. compress utilise le algorithme de compression LZW , qui à l'époque était sous brevet et son utilisation gratuite était contestée par les détenteurs des brevets. Bien que certaines mises en œuvre 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 n'enfreignait aucun brevet. Cette mise en œuvre n'a pas été aussi difficile au cours des 20 dernières années. L'utilitaire Unix gzip était destiné à remplacer compress, et est en fait capable de décompresser les données compress- compressées (en supposant que vous ayez pu analyser cette phrase). gzip ajoute un .gz au nom du fichier. gzip utilise le format de données compressé Deflate, qui compresse un peu mieux que Unix compress, offre 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 davantage d'informations que le format compress autorisé, telles que le nom de fichier d'origine et l'heure de modification du fichier.

Bien que compress ne comprime qu'un seul fichier, il était courant d'utiliser l'utilitaire tar pour créer une archive de fichiers, leurs attributs et leur structure de répertoires dans un seul fichier .tar, et puis compressez-le avec compress pour créer un fichier .tar.Z. En fait, l'utilitaire tar avait et avait toujours la possibilité d'effectuer la compression en même temps, au lieu d'avoir à canaliser la sortie de tar vers compress. Tout cela est 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 permet de tirer parti de la redondance entre les fichiers, en particulier de nombreux petits fichiers. .tar.gz est le format d'archive le plus utilisé sous Unix en raison de sa très grande portabilité, mais des méthodes de compression plus efficaces sont également utilisées. Vous verrez donc souvent .tar.bz2 et .tar.xz les archives.

Contrairement à .tar, .Zip a un répertoire central à la fin, qui fournit une liste du contenu. Cela, ainsi que la compression séparée, fournit un accès aléatoire aux entrées individuelles d’un fichier .Zip. Un fichier .tar doit être décompressé et analysé du début à la fin pour créer un répertoire. C'est ainsi qu'un fichier .tar est répertorié.

Peu de temps après l’introduction de gzip, vers le milieu des années 90, le même litige en matière de brevets remettait en question le libre usage du format d’image .gif, très largement utilisé sur les babillards électroniques et sur le World Wide Web (une nouveauté à l’époque). temps). Un petit groupe a donc 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 de redondance. Afin de promouvoir une utilisation généralisée du format PNG, deux bibliothèques de codes 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 destiné à être utilisé par libpng, ainsi que pour d'autres applications. zlib a été adapté du code gzip.

Tous les brevets mentionnés ont expiré depuis.

La bibliothèque zlib prend en charge la compression et la décompression Deflate, ainsi que trois types d’enveloppement autour des flux de déflation. Ce sont: pas de wrapping du tout ("raw" deflate), zlib wrapping , utilisé dans les blocs de données au format PNG, et gzip wrapping, pour fournir des routines gzip au programmeur. La différence principale entre les enveloppes zlib et gzip est que l'encapsulation zlib est plus compacte, six octets contre un minimum de 18 octets pour gzip, et le contrôle d'intégrité, Adler-32, est plus rapide que le CRC-32 utilisé par gzip. Raw deflate est utilisé par les programmes qui lisent et écrivent le format .Zip, qui est un autre format qui englobe les données compressées de deflate.

zlib est maintenant largement utilisé pour la transmission et le stockage de 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 deflate peuvent générer différentes sorties compressées pour les mêmes données d'entrée, comme en témoigne l'existence de niveaux de compression sélectionnables permettant de réduire l'efficacité de la compression en temps CPU. zlib et PKZIP ne sont pas les seules implémentations de la compression et de la décompression à déflate. Les tilitaire d'archivage 7-Zip et ceux de Google bibliothèque zopfli ont la possibilité d'utiliser beaucoup plus de temps processeur que zlib afin d'extraire les derniers bits possibles lors de l'utilisation de la commande deflate format, réduisant les tailles compressées de quelques pour cent par rapport au niveau de compression le plus élevé de zlib. pigz utility , 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’effet sur le temps de l’utilisation de zopfli en scindant le compression de gros fichiers sur plusieurs processeurs et cœurs.

2365
Mark Adler

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 autres, et un format de fichier permettant de 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 .

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

41
Niels Keurentjes

La différence la plus importante est que gzip ne peut compresser qu'un seul fichier, tandis que Zip compresse plusieurs fichiers un par un et les archive ensuite en un seul fichier. Ainsi, gzip est accompagné de 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’avez besoin que d’un seul fichier, vous devez décompresser l’ensemble du fichier gzip pour obtenir ce fichier. Ce n'est pas nécessaire si vous avez un fichier Zip.

D'autre part, si vous compressez 10 fichiers similaires ou même identiques, l'archive Zip sera beaucoup plus grande car chaque fichier est compressé individuellement, alors que dans gzip associé à tar, un seul fichier est compressé, ce qui est beaucoup plus efficace si les fichiers sont similiar (égal).

27
Tim Zimmermann