zlib - zlib
| Première version | 1er mai 1995 |
|---|---|
| Version stable | 1.2.11 / 15 janvier 2017
|
| Dépôt |
|
| Écrit en | C |
| Système opérateur | Multiplateforme |
| Taper | Compression de données |
| Licence | Licence zlib |
| Site Internet | zlib |
zlib est une bibliothèque logicielle utilisée pour la compression de données . zlib a été écrit par Jean-loup Gailly et Mark Adler et est une abstraction de l' algorithme de compression DEFLATE utilisé dans leur programme de compression de fichiers gzip . zlib est également un composant crucial de nombreuses plates-formes logicielles, notamment Linux , macOS et iOS . Il a également été utilisé dans des consoles de jeux telles que PlayStation 4 , PlayStation 3 , Wii U , Wii , Xbox One et Xbox 360 .
La première version publique de zlib, 0.9, a été publiée le 1er mai 1995 et était à l'origine destinée à être utilisée avec la bibliothèque d'images libpng . Il s'agit d' un logiciel libre , distribué sous la licence zlib .
Capacités
Encapsulation
Les données compressées zlib sont généralement écrites avec un wrapper gzip ou zlib. L'encapsuleur encapsule les données DEFLATE brutes en ajoutant un en-tête et une remorque. Cela fournit une identification de flux et une détection d'erreurs qui ne sont pas fournies par les données DEFLATE brutes.
L'en-tête gzip, utilisé dans le format de fichier omniprésent gzip , est plus grand que l'en-tête zlib, car il stocke un nom de fichier et d'autres informations sur le système de fichiers.
Algorithme
En septembre 2018, zlib ne prend en charge qu'un seul algorithme, appelé DEFLATE , qui utilise une combinaison d'une variation de LZ77 (Lempel-Ziv 1977) et de codage Huffman . Cet algorithme fournit une bonne compression sur une grande variété de données avec une utilisation minimale des ressources système. C'est également l'algorithme utilisé dans le format d'archive Zip . L'en-tête prend en compte d'autres algorithmes, mais aucun n'est actuellement implémenté.
Utilisation des ressources
zlib fournit des fonctionnalités pour le contrôle de l'utilisation du processeur et de la mémoire. Une valeur de niveau de compression peut être fournie qui échange la vitesse contre la compression. Il existe également des fonctionnalités de conservation de la mémoire, utiles dans les environnements à mémoire restreinte, tels que certains systèmes embarqués.
Stratégie
La compression peut être optimisée pour des types de données spécifiques. Si l'on utilise la bibliothèque pour toujours compresser des types de données spécifiques, l'utilisation d'une stratégie spécifique peut améliorer la compression et les performances. Par exemple, si les données contiennent de longues longueurs d'octets répétés, la stratégie de codage de longueur d'exécution (RLE) peut donner de bons résultats à une vitesse plus élevée. Pour les données générales, la stratégie par défaut est préférée.
La gestion des erreurs
Des erreurs dans les données compressées peuvent être détectées et ignorées. De plus, si des points de « vidage complet » sont écrits dans le flux compressé, les données corrompues peuvent être ignorées et la décompression se resynchronisera au point de purge suivant, bien qu'aucune récupération d'erreur des données corrompues ne soit fournie. Les points de vidage complet sont utiles pour les flux de données volumineux sur des canaux peu fiables, où certaines pertes de données sont sans importance, comme dans certaines applications multimédias. Cependant, la création de nombreux points de rinçage peut affecter la vitesse ainsi que la quantité (rapport) de compression.
Longueur des données
Il n'y a pas de limite à la longueur des données qui peuvent être compressées ou décompressées. Des appels répétés à la bibliothèque permettent de traiter un nombre illimité de blocs de données. Certains codes auxiliaires (compteurs) peuvent souffrir d'un débordement pour les longs flux de données, mais cela n'affecte pas la compression ou la décompression réelle.
Lors de la compression d'un flux de données long (ou infini), il est conseillé d'écrire régulièrement des points de vidage complet.
Applications
Aujourd'hui, zlib est en quelque sorte une norme de facto , au point que zlib et DEFLATE sont souvent utilisés de manière interchangeable dans les documents de normes, des milliers d'applications s'appuyant sur elle pour la compression, directement ou indirectement. Ceux-ci inclus:
- Le noyau Linux , où zlib est utilisé pour implémenter des protocoles réseau compressés, des systèmes de fichiers compressés et pour décompresser l'image du noyau au démarrage.
- GNU Binutils et le débogueur GNU (GDB)
- libpng , l' implémentation de référence pour le format d' image PNG , qui spécifie DEFLATE comme compression de flux pour ses données bitmap .
- libwww , une API pour les applications Web telles que les navigateurs Web .
- Le serveur HTTP Apache , qui utilise zlib pour implémenter HTTP/1.1 .
- De même, la bibliothèque cURL utilise zlib pour décompresser les réponses HTTP.
- Le client et le serveur OpenSSH , qui s'appuient sur zlib pour effectuer la compression facultative offerte par le protocole Secure Shell .
- Les bibliothèques de sécurité OpenSSL et GnuTLS , qui peuvent éventuellement utiliser zlib pour compresser les connexions TLS .
- La bibliothèque multimédia FFmpeg , qui utilise zlib pour lire et écrire les parties compressées par DEFLATE des formats de flux , tels que Matroska .
- Le synchroniseur de fichiers distants rsync , qui utilise zlib pour implémenter la compression de protocole facultative.
- Les gestionnaires de packages dpkg et RPM , qui utilisent zlib pour décompresser les fichiers des packages logiciels compressés.
- Les systèmes de contrôle de version Apache Subversion et CVS , qui utilisent zlib pour compresser le trafic vers et depuis des référentiels distants.
- Le format de stockage de données orienté colonne Apache ORC utilise ZLib comme méthode de compression par défaut.
- Le système de contrôle de version Git utilise zlib pour stocker le contenu de ses objets de données (blobs, arbres, commits et balises).
- Le SGBDR PostgreSQL utilise zlib avec un format de vidage personnalisé (pg_dump -Fc) pour les sauvegardes de base de données.
- La classe System.IO.Compression.DeflateStream de Microsoft .NET Framework 2.0 et supérieur.
- L'utilitaire "deflate" de TORNADO dans le cadre du système d' exploitation VxWorks créé par Wind River Systems utilise zlib pour compresser les images ROM de démarrage.
- , programme de compression zlib brut, partie de qpdf
- Le SGBDR MySQL utilise ZLib LZ77 pour la compression dans les tables InnoDB
zlib est également utilisé dans de nombreux appareils embarqués, tels que l' iPhone d' Apple et la PlayStation 3 de Sony , car le code est portable, sous licence libérale et a une empreinte mémoire relativement faible.
Fourches
Une bibliothèque couramment utilisée construite sur une ancienne base de code, zlib est également fréquemment forkée par des tiers qui revendiquent des améliorations à cette bibliothèque :
- Intel a un fork hautes performances de zlib.
- CloudFlare maintient une fourchette hautes performances avec des améliorations "massives".
- Zlib-ng est un fork de remplacement zlib avec des optimisations pour les systèmes de "nouvelle génération".