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?
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?
Réponses:
Forme courte:
.zip
est un format d'archive utilisant, généralement, la méthode de compression Deflate . Le .gz
format 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 .zip
fichiers 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 zip
et des unzip
utilitaires 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 .zip
format.
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 .Z
au nom du fichier. compress
utilise 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' gzip
utilitaire Unix a été conçu comme un remplacement direct pourcompress
, et est en fait capable de décompresser des compress
données compressées (en supposant que vous avez pu analyser cette phrase). gzip
ajoute un .gz
au nom du fichier. gzip
utilise 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 compress
format autorisé, comme 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' tar
utilitaire pour créer une archive de fichiers, leurs attributs et leur structure de répertoires dans un seul .tar
fichier, puis de le compresser avec compress
pour créer un .tar.Z
fichier. En fait, l' tar
utilitaire avait et a toujours la possibilité de faire la compression en même temps, au lieu de devoir diriger la sortie de tar
vers compress
. Tout cela a été reporté au format gzip, et tar
a une option pour compresser directement au .tar.gz
format. Le tar.gz
format se comprime mieux que l' .zip
approche, 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'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.bz2
et .tar.xz
archiverez souvent .
Contrairement à .tar
, .zip
a 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 .zip
fichier. Un .tar
fichier devrait être décompressé et analysé du début à la fin afin de créer un répertoire, c'est ainsi qu'un .tar
fichier 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 .gif
format 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 gzip
code.
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 .zip
format, 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: deflate
signifie 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.
.tar.gz
fichiers, 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.)
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 .tgz
ou .tar.gz
est communément appelé tarball .
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 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).