Le format de fichier ZIP est un format de compression et d'archivage largement utilisé qui permet de regrouper plusieurs fichiers dans un seul fichier compressé. Il a été créé à l'origine par Phil Katz en 1989 et est depuis devenu une norme omniprésente pour la compression et la distribution de fichiers. Le format ZIP utilise une combinaison d'algorithmes de compression sans perte pour réduire la taille des fichiers contenus, tout en leur permettant d'être extraits individuellement à la demande.
Une archive ZIP se compose d'une séquence d'enregistrements de fichiers, chacun représentant un fichier compressé, suivie d'un répertoire central à la fin de l'archive. Chaque enregistrement de fichier inclut des métadonnées sur le fichier, telles que son nom, sa taille et ses horodatages, ainsi que les données du fichier compressé lui-même. Le répertoire central contient une liste de tous les enregistrements de fichiers dans l'archive, ainsi que des métadonnées supplémentaires.
Le format ZIP prend en charge plusieurs méthodes de compression, mais la plus couramment utilisée est DEFLATE, qui est basée sur l'algorithme LZ77 et le codage de Huffman. DEFLATE fonctionne en trouvant des séquences de données répétées et en les remplaçant par des références à des occurrences antérieures, combinées au codage de Huffman pour représenter efficacement les données compressées. Cela permet une réduction de taille significative, en particulier pour les fichiers texte.
Pour créer une archive ZIP, les fichiers sont d'abord compressés individuellement à l'aide de la méthode de compression choisie. Chaque fichier compressé est ensuite ajouté à l'archive en tant qu'enregistrement de fichier, qui comprend un en-tête de fichier local suivi des données compressées. L'en-tête de fichier local contient des métadonnées telles que le nom du fichier, la méthode de compression, la somme de contrôle CRC-32, les tailles compressées et non compressées et les horodatages.
Une fois que tous les enregistrements de fichiers ont été ajoutés, le répertoire central est écrit à la fin de l'archive. Le répertoire central commence par une signature et inclut un en-tête de fichier pour chaque enregistrement de fichier, contenant des métadonnées similaires aux en-têtes de fichiers locaux. De plus, le répertoire central inclut des informations sur l'archive dans son ensemble, telles que le nombre de fichiers et la taille du répertoire central.
Enfin, l'archive ZIP se termine par un enregistrement de fin de répertoire central, qui comprend une signature, le numéro de disque sur lequel le répertoire central commence, le nombre d'enregistrements de répertoire central, la taille du répertoire central, le décalage du début du répertoire central par rapport au début de l'archive et un champ de commentaire.
L'une des principales caractéristiques du format ZIP est sa capacité à prendre en charge diverses méthodes de compression. En plus de DEFLATE, il prend également en charge la méthode STORE (aucune compression), BZIP2, LZMA, PPMd et autres. Cette flexibilité permet d'équilibrer le taux de compression et le temps de traitement, en fonction des exigences spécifiques du cas d'utilisation.
Un autre aspect important du format ZIP est sa prise en charge du chiffrement des fichiers et des répertoires. Le schéma de chiffrement ZIP traditionnel utilisait une méthode de chiffrement simple basée sur un mot de passe, mais celle-ci a été largement remplacée par le chiffrement AES plus sécurisé dans les outils ZIP modernes. Lorsqu'un fichier est chiffré, ses données compressées sont chiffrées à l'aide de la méthode de chiffrement choisie, et des métadonnées supplémentaires sont ajoutées à l'en-tête du fichier pour indiquer l'état du chiffrement.
Le format ZIP inclut également des fonctionnalités de vérification de l'intégrité des données et de détection des erreurs. Chaque enregistrement de fichier inclut une somme de contrôle CRC-32 des données non compressées, ce qui permet de vérifier l'intégrité du fichier lors de l'extraction. De plus, le répertoire central inclut une somme de contrôle CRC-32 de toute la structure du répertoire central, fournissant une couche supplémentaire de vérification de l'intégrité pour l'archive dans son ensemble.
Au fil des ans, plusieurs extensions et améliorations ont été apportées au format ZIP pour améliorer ses fonctionnalités et son efficacité. L'une de ces extensions est le format ZIP64, qui permet des archives et des fichiers de plus de 4 Go. Ceci est réalisé en utilisant des champs 64 bits pour les valeurs de taille et de décalage, au lieu des champs 32 bits d'origine. Une autre extension est l'utilisation de l'encodage des noms de fichiers et des commentaires, qui permet l'utilisation de caractères Unicode dans les noms de fichiers et les commentaires.
Le format ZIP a également été adapté pour une utilisation dans divers contextes spécialisés, tels que le format OpenDocument utilisé par les suites bureautiques, le format JAR (Java Archive) utilisé pour distribuer les applications Java et le format EPUB utilisé pour les livres électroniques. Dans ces cas, le format ZIP sert de conteneur pour les types de fichiers et les métadonnées spécifiques requis par les formats respectifs.
Malgré son âge, le format ZIP reste largement utilisé et pris en charge sur toutes les plateformes et tous les appareils. Sa simplicité, son efficacité et sa compatibilité en ont fait un choix incontournable pour la compression et la distribution de fichiers. Cependant, le format ZIP présente également certaines limitations, telles que l'absence de prise en charge intégrée des archives fractionnées, de la compression solide ou des enregistrements de récupération.
Pour remédier à certaines de ces limitations, des formats d'archivage alternatifs ont été développés, tels que RAR, 7z et TAR. Ces formats offrent des fonctionnalités supplémentaires et des taux de compression améliorés dans certains cas, mais ils peuvent ne pas bénéficier du même niveau de prise en charge universelle que ZIP.
En conclusion, le format de fichier ZIP est un format de compression et d'archivage polyvalent et efficace qui a résisté à l'épreuve du temps. Sa capacité à regrouper plusieurs fichiers, à les compresser efficacement et à fournir une vérification de l'intégrité des données en a fait un outil essentiel pour le stockage et la distribution de fichiers. Malgré certaines limitations, le format ZIP continue d'être largement utilisé et pris en charge, grâce à sa simplicité et à sa compatibilité.
La compression de fichiers réduit la redondance afin que la même information prenne moins de bits. La limite supérieure de ce que vous pouvez faire est régie par la théorie de l'information : pour la compression sans perte, la limite est l'entropie de la source (voir le théorème de codage de source et son article original de 1948 « Une théorie mathématique de la communication »). Pour la compression avec perte, le compromis entre le débit et la qualité est capturé par la théorie du débit-distorsion.
La plupart des compresseurs ont deux étapes. Premièrement, un modèle prédit ou expose la structure des données. Deuxièmement, un codeur transforme ces prédictions en modèles de bits quasi optimaux. Une famille de modélisation classique est Lempel-Ziv : LZ77 (1977) et LZ78 (1978) détectent les sous-chaînes répétées et émettent des références au lieu d'octets bruts. Du côté du codage, le codage de Huffman (voir l'article original de 1952) attribue des codes plus courts aux symboles les plus probables. Le codage arithmétique et le codage par plage sont des alternatives plus fines qui se rapprochent de la limite de l'entropie, tandis que les systèmes de numération asymétriques (ANS) modernes permettent une compression similaire avec des implémentations rapides basées sur des tables.
DEFLATE (utilisé par gzip, zlib et ZIP) combine LZ77 avec le codage de Huffman. Ses spécifications sont publiques : DEFLATE RFC 1951, wrapper zlib RFC 1950, et format de fichier gzip RFC 1952. Gzip est conçu pour le streaming et explicitement ne tente pas de fournir un accès aléatoire. Les images PNG normalisent DEFLATE comme leur seule méthode de compression (avec une fenêtre maximale de 32 Kio), conformément à la spécification PNG « Méthode de compression 0… dégonfler/gonfler… au plus 32768 octets » et W3C/ISO PNG 2e édition.
Zstandard (zstd) : un compresseur polyvalent plus récent conçu pour des taux de compression élevés avec une décompression très rapide. Le format est documenté dans la RFC 8878 (également miroir HTML) et la spécification de référence sur GitHub. Comme gzip, la trame de base ne vise pas l'accès aléatoire. L'un des superpouvoirs de zstd réside dans les dictionnaires : de petits échantillons de votre corpus qui améliorent considérablement la compression sur de nombreux fichiers minuscules ou similaires (voir la documentation du dictionnaire python-zstandard et l'exemple pratique de Nigel Tao). Les implémentations acceptent à la fois les dictionnaires « non structurés » et « structurés » (discussion).
Brotli : optimisé pour le contenu Web (par exemple, les polices WOFF2, HTTP). Il mélange un dictionnaire statique avec un noyau d'entropie+LZ de type DEFLATE. La spécification est la RFC 7932, qui note également une fenêtre glissante de 2WBITS−16 avec WBITS dans [10, 24] (1 Kio−16 B jusqu'à 16 Mio−16 B) et qu'il ne tente pas d'accès aléatoire. Brotli surpasse souvent gzip sur le texte Web tout en décodant rapidement.
Conteneur ZIP : ZIP est une archive de fichiers qui peut stocker des entrées avec diverses méthodes de compression (deflate, store, zstd, etc.). La norme de facto est l'APPNOTE de PKWARE (voir le portail APPNOTE, une copie hébergée, et les aperçus de la LC Format de fichier ZIP (PKWARE) / ZIP 6.3.3).
LZ4 vise la vitesse brute avec des ratios modestes. Voir sa page de projet (« compression extrêmement rapide ») et son format de trame. Il est idéal pour les caches en mémoire, la télémétrie ou les chemins d'accès très sollicités où la décompression doit être proche de la vitesse de la RAM.
XZ / LZMA visent la densité (excellents ratios) avec une compression relativement lente. XZ est un conteneur ; le gros du travail est généralement effectué par LZMA/LZMA2 (modélisation de type LZ77 + codage par plage). Voir le format de fichier .xz, la spécification LZMA (Pavlov), et les notes du noyau Linux sur XZ Embedded. XZ surcompresse généralement gzip et rivalise souvent avec les codecs modernes à haut ratio, mais avec des temps d'encodage plus lents.
bzip2 applique la transformée de Burrows-Wheeler (BWT), move-to-front, RLE et le codage de Huffman. Il est généralement plus petit que gzip mais plus lent ; voir le manuel officiel et les pages de manuel (Linux).
La « taille de la fenêtre » est importante. Les références DEFLATE ne peuvent remonter que de 32 Kio (RFC 1951 et la limite de 32 Kio de PNG notée ici). La fenêtre de Brotli va d'environ 1 Kio à 16 Mio (RFC 7932). Zstd ajuste la fenêtre et la profondeur de recherche par niveau (RFC 8878). Les flux de base gzip/zstd/brotli sont conçus pour un décodage séquentiel ; les formats de base ne promettent pas d'accès aléatoire, bien que des conteneurs (par exemple, des index tar, un tramage en morceaux ou des index spécifiques au format) puissent l'ajouter.
Les formats ci-dessus sont sans perte : vous pouvez reconstruire les octets exacts. Les codecs multimédias sont souvent avec perte : ils suppriment les détails imperceptibles pour atteindre des débits binaires inférieurs. Dans les images, le JPEG classique (DCT, quantification, codage entropique) est normalisé dans ITU-T T.81 / ISO/IEC 10918-1. En audio, MP3 (MPEG-1 Layer III) et AAC (MPEG-2/4) reposent sur des modèles perceptuels et des transformées MDCT (voir ISO/IEC 11172-3, ISO/IEC 13818-7, et un aperçu de la MDCT ici). Avec et sans perte peuvent coexister (par exemple, PNG pour les ressources de l'interface utilisateur ; codecs Web pour les images/vidéo/audio).
Théorie : Shannon 1948 · Débit-distorsion · Codage : Huffman 1952 · Codage arithmétique · Codage par plage · ANS. Formats : DEFLATE · zlib · gzip · Zstandard · Brotli · Trame LZ4 · Format XZ. Pile BWT : Burrows–Wheeler (1994) · manuel bzip2. Médias : JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Conclusion : choisissez un compresseur qui correspond à vos données et à vos contraintes, mesurez sur des entrées réelles et n'oubliez pas les gains des dictionnaires et du tramage intelligent. Avec la bonne combinaison, vous pouvez obtenir des fichiers plus petits, des transferts plus rapides et des applications plus réactives, sans sacrifier la correction ou la portabilité.
La compression de fichiers est un processus qui réduit la taille d'un fichier ou de fichiers, généralement pour économiser de l'espace de stockage ou accélérer la transmission sur un réseau.
La compression de fichiers fonctionne en identifiant et en supprimant les redondances dans les données. Elle utilise des algorithmes pour encoder les données originales dans un espace plus petit.
Les deux types principaux de compression de fichiers sont la compression sans perte et la compression avec pertes. La compression sans perte permet de restaurer parfaitement le fichier original, tandis que la compression avec pertes permet une réduction de taille plus significative au détriment de la perte de qualité des données.
Un exemple populaire d'un outil de compression de fichiers est WinZip, qui prend en charge de multiples formats de compression dont ZIP et RAR.
Avec la compression sans perte, la qualité reste inchangée. Cependant, avec la compression avec pertes, il peut y avoir une diminution notable de la qualité car elle élimine les données moins importantes pour réduire de manière plus significative la taille du fichier.
Oui, la compression de fichiers est sûre en termes d'intégrité des données, surtout avec la compression sans perte. Cependant, comme tout fichier, les fichiers compressés peuvent être ciblés par des logiciels malveillants ou des virus, il est donc toujours important d'avoir un logiciel de sécurité de confiance en place.
Presque tous les types de fichiers peuvent être compressés, y compris les fichiers texte, images, audio, vidéo, et les fichiers logiciels. Cependant, le niveau de compression réalisable peut varier considérablement selon les types de fichiers.
Un fichier ZIP est un type de format de fichier qui utilise la compression sans perte pour réduire la taille d'un ou de plusieurs fichiers. Plusieurs fichiers dans un fichier ZIP sont effectivement regroupés en un seul fichier, ce qui facilite également le partage.
Techniquement, oui, bien que la réduction de taille supplémentaire puisse être minime voire contre-productive. Compresser un fichier déjà compressé peut parfois augmenter sa taille en raison des métadonnées ajoutées par l'algorithme de compression.
Pour décompresser un fichier, il vous faut généralement un outil de décompression ou de dézippage, comme WinZip ou 7-Zip. Ces outils peuvent extraire les fichiers originaux à partir du format compressé.