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 ?
Formes courtes:
Le [.zip
est un format d'archive][1] utilisant, généralement, la [méthode de compression Deflate][2]. Le format [.gz
gzip][3] est destiné aux fichiers uniques et utilise également la méthode de compression Deflate. Souvent, gzip est utilisé en combinaison avec [tar pour créer un format d'archive compressé][4], .tar.gz
. La [bibliothèque zlib][5] fournit le code de compression et de décompression Deflate à l'usage de zip, gzip, [png][6] (qui utilise le [wrapper zlib][7] sur les données deflate), et de nombreuses autres applications.
Forme longue
Le [format ZIP][1] a été développé par Phil Katz comme un format ouvert avec une spécification ouverte, où sa mise en œuvre, PKZIP, était un shareware. Il s'agit d'un format d'archive qui stocke des fichiers et leur structure de répertoire, où chaque fichier est compressé individuellement. Le type de fichier est .zip
. Les fichiers, ainsi que la structure du répertoire, peuvent ê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 sont utilisées de façon variable et limitée. La seule méthode vraiment répandue dans le format ZIP est la méthode 8, [Deflate][2], et dans une moindre mesure la méthode 0, qui n'est pas du tout une compression. Pratiquement tous les fichiers .zip' que vous rencontrerez dans la nature utiliseront exclusivement les méthodes 8 et 0, voire uniquement la méthode 8. (La méthode 8 permet également de stocker efficacement les données sans compression et avec une expansion relativement faible, 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 relative aux conteneurs de fichiers][8] est un format zip restreint, tel qu'il est utilisé dans les fichiers d'archives Java (.jar), les fichiers Office Open XML (Microsoft Office .docx, .xlsx, .pptx), les fichiers Office Document Format (.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 cryptage ou de signatures. Vers 1990, le [groupe Info-ZIP][9] a écrit des implémentations portables, gratuites et open source des utilitaires
zipet
unzip, supportant 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][3] a été développé pour remplacer l'[utilitaire Unix
compress][10], dérivé du code Deflate dans les utilitaires Info-ZIP. Unix
compressa été conçu pour compresser un seul fichier ou flux, en ajoutant un
.Zau nom du fichier.
compressutilise l'[algorithme de compression LZW][11], qui était à l'époque sous brevet et dont l'utilisation libre était contestée par les détenteurs du brevet. 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 de Deflate qui ne violait aucun brevet. Cette mise en œuvre n'a pas été remise en cause au cours des 20 dernières années. L'utilitaire Unix
gzipa été conçu comme un remplacement direct de
compress, et est en fait capable de décompresser des données compressées par
compress(en supposant que vous ayez été capable d'analyser cette phrase).
gzipajoute un
.gzau nom du fichier.
gziputilise le format de données compressées Deflate, qui compresse un peu mieux que le
compressd'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
compressne le permettait, comme le nom du fichier original et l'heure de modification du fichier. Bien que
compressne compresse qu'un seul fichier, il était courant d'utiliser l'utilitaire
tarpour créer une archive de fichiers, leurs attributs, et leur structure de répertoire dans un seul fichier
.tar, et de le compresser ensuite avec
compresspour faire un fichier
.tar.Z. En fait, l'utilitaire
taravait et a toujours une option pour faire la compression en même temps, au lieu de devoir envoyer la sortie de
tarvers
compress. Tout ceci s'est poursuivi avec le format gzip, et
tara une option pour compresser directement au format
.tar.gz. Le format
tar.gzcompresse mieux que l'approche
.zip, puisque la compression d'un
.tarpeut tirer parti de la redondance entre les fichiers, en particulier de nombreux petits fichiers.
.tar.gzest le format d'archive le plus communément utilisé sous Unix en raison de sa très grande portabilité, mais il existe également des méthodes de compression plus efficaces, vous verrez donc souvent des archives
.tar.bz2et
.tar.xz. Contrairement à
.tar,
.zipa un répertoire central à la fin, qui fournit une liste du contenu. Cela et la compression séparée permettent un accès aléatoire aux entrées individuelles d'un fichier
.zip. Un fichier
.tardevrait être décompressé et scanné du début à la fin afin de construire un répertoire, ce qui est la façon dont un fichier
.tarest listé. Peu de temps après l'introduction de gzip, vers le milieu des années 1990, le même conflit de brevets a remis en question la libre utilisation du format d'image
.gif, très largement utilisé sur les babillards électroniques et sur 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, pour remplacer
.gif. Ce format utilise également le format Deflate pour la compression, qui est appliquée après que les filtres sur les données de l'image exposent davantage la redondance. Afin de promouvoir l'utilisation généralisée du format PNG, deux bibliothèques de code libre ont été créées. [libpng][12] et [zlib][5]. libpng gère toutes les caractéristiques 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é du code
gzip. Tous les brevets mentionnés ont depuis expiré. La bibliothèque zlib supporte la compression et la décompression Deflate, ainsi que trois types d'enveloppes autour des flux deflate. Il y a trois types d'habillage autour des flux deflate : pas d'habillage du tout (deflate "brut"), [habillage zlib][7], qui est utilisé dans les blocs de données du format PNG, et habillage gzip, pour fournir des routines gzip au programmeur. La principale différence entre l'habillage zlib et gzip est que l'habillage zlib est plus compact, six octets contre un minimum de 18 octets pour gzip, et que le contrôle d'intégrité, Adler-32, fonctionne plus rapidement 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 enveloppe les données compressées 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 compriment et décompressent les données à l'aide de zlib.
Différentes implémentations de deflate peuvent donner lieu à 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 qui permettent d'échanger l'efficacité de la compression contre le temps CPU. zlib et PKZIP ne sont pas les seules implémentations de la compression et de la décompression deflate. L'utilitaire d'archivage [7-Zip][13] et la [bibliothèque zopfli][14] de Google ont la capacité d'utiliser beaucoup plus de temps CPU que zlib afin d'extraire les derniers bits possibles lors de l'utilisation du format deflate, réduisant les tailles compressées de quelques pour cent par rapport au niveau de compression le plus élevé de zlib. L'utilitaire [pigz][15], 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 gros fichiers sur plusieurs processeurs et cœurs.
[1] : http://www.pkware.com/documents/casestudies/APPNOTE.TXT
[2] : http://tools.ietf.org/html/rfc1951
[3] : http://tools.ietf.org/html/rfc1952
[4] : http://www.gnu.org/software/tar/manual/html_node/Standard.html
[5] : http://zlib.net/
[6] : http://www.w3.org/TR/PNG/
[7] : http://tools.ietf.org/html/rfc1950
[8] : http://www.digitalpreservation.gov/formats/fdd/fdd000361.shtml
[9] : http://www.info-zip.org/
[10] : https://en.wikipedia.org/wiki/Compress
[12] : http://www.libpng.org/pub/png/libpng.html [13] : http://www.7-zip.org/ [14] : http://github.com/google/zopfli [15] : http://zlib.net/pigz/
Le ZIP est un format de fichier utilisé pour stocker un nombre arbitraire de fichiers et de dossiers ensemble avec une compression sans perte. Il ne fait pas d'hypothèses strictes 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 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é un tarball.
zlib est une bibliothèque de fonctions encapsulant DEFLATE dans sa forme la plus courante LZ77.
La différence la plus importante est que gzip n'est capable de compresser qu'un seul fichier alors que zip compresse plusieurs fichiers un par un et les archive ensuite en un seul fichier. Ainsi, gzip est utilisé avec tar la plupart du temps (il existe cependant d'autres possibilités). Cela s'accompagne de quelques (dés)avantages.
Si vous avez une grosse archive et que vous n'avez besoin que d'un seul fichier, vous devez décompresser tout le fichier gzip pour atteindre ce fichier. Cela n'est pas nécessaire si vous avez un fichier zip.
D'un autre côté, si vous comprimez 10 fichiers similaires ou même identiques, l'archive zip sera beaucoup plus grande parce que chaque fichier est comprimé individuellement, alors que dans gzip en combinaison avec tar, un seul fichier est comprimé, ce qui est beaucoup plus efficace si les fichiers sont similaires (égaux).