Zlib

zlib
software
Logo
Logo
GenereLibreria di C
Compressione dei dati
SviluppatoreMark Adler e Jean-Loup Gailly
Data prima versione1º maggio 1995
Ultima versione1.3.2 (17 febbraio 2026)
Sistema operativoMultipiattaforma
LinguaggioC
LicenzaZlib license
(licenza libera)
Sito webzlib.net/

zlib (/ˈziːlIb/ o "zeta-lib", /ˈziːt@,lIb/) è una libreria software utilizzata per la compressione dei dati. zlib è stato scritto da Jean-loup Gailly e Mark Adler ed è un'astrazione dell'algoritmo di compressione DEFLATE utilizzato nel loro programma di compressione file gzip. zlib è anche un componente cruciale di molte piattaforme software, tra cui Linux, macOS e iOS. È stata utilizzata anche in console di gioco come PlayStation 4, PlayStation 3, Wii U, Wii, Xbox One e Xbox 360.

La prima versione pubblica di zlib, 0.9, è stata rilasciata il 1 maggio 1995 ed era originariamente destinata all'uso con la libreria di immagini libpng. È un software libero, distribuito sotto la licenza zlib.

Caratteristiche

Incapsulamento

I dati compressi zlib sono in genere scritti con un gzip o un wrapper zlib. Il wrapper incapsula i dati grezzi DEFLATE aggiungendo un'intestazione e una sezione di coda. Ciò fornisce l'identificazione del flusso e il rilevamento degli errori che non sono forniti dai dati grezzi DEFLATE.

L'intestazione gzip, utilizzata nell'onnipresente formato di file gzip, è più grande dell'intestazione zlib, poiché memorizza un nome file e altre informazioni sul file system.

Algoritmo

zlib supporta solo un algoritmo, chiamato DEFLATE, che utilizza una combinazione di una variazione di LZ77 (Lempel-Ziv 1977) e la codifica di Huffman. Questo algoritmo fornisce una buona compressione su un'ampia varietà di dati con un utilizzo minimo delle risorse di sistema. Questo è anche l'algoritmo utilizzato nel formato di archivio Zip. L'intestazione tiene conto di altri algoritmi, ma nessuno è attualmente implementato.

Uso delle risorse

zlib fornisce funzioni per il controllo del processore e dell'uso della memoria. Può essere fornito un valore del livello di compressione che scambia la velocità con la compressione. Esistono anche funzioni per la conservazione della memoria, utili in ambienti con memoria limitata, come alcuni sistemi embedded.

Strategia

La compressione può essere ottimizzata per tipi specifici di dati. Se si utilizza la libreria per comprimere sempre tipi specifici di dati, l'utilizzo di una strategia specifica può migliorare la compressione e le prestazioni. Ad esempio, se i dati contengono lunghe lunghezze di byte ripetuti, la strategia di codifica run-length (RLE) può dare buoni risultati a una velocità maggiore. Per i dati generali, è preferibile la strategia predefinita.

Gestione degli errori

Gli errori nei dati compressi possono essere rilevati e ignorati se necessario. Inoltre, se i punti "full-flush" vengono scritti nel flusso compresso, i dati corrotti possono essere ignorati e la decompressione si risincronizzerà al punto di flush successivo, anche se non viene fornito alcun recupero di errore dei dati corrotti. I punti full-flush sono utili per grandi flussi di dati su canali inaffidabili, dove una certa perdita di dati non è importante, come in alcune applicazioni multimediali. Tuttavia, la creazione di molti punti di livellamento può influire sulla velocità e sulla quantità (rapporto) di compressione.

Lunghezza dei dati

Non c'è limite alla lunghezza dei dati che possono essere compressi o decompressi. Ripetute chiamate alla libreria consentono di gestire un numero illimitato di blocchi di dati. Alcuni codici ausiliari (contatori) possono soffrire di overflow per lunghi flussi di dati, ma ciò non influisce sulla compressione o decompressione effettiva.

Quando si comprime un lungo flusso di dati (o infinito), è consigliabile scrivere punti di full-flush a intervalli regolari.

Applicazioni

Oggi, zlib è una sorta di standard de facto, al punto che zlib e DEFLATE sono spesso usati in modo intercambiabile nei documenti standard, con migliaia di applicazioni che si affidano ad esso per la compressione, direttamente o indirettamente. Questi includono:

zlib è utilizzato anche in molti dispositivi embedded, come Apple iPhone e Sony PlayStation 3, perché il codice è portatile, con licenza libera e ha un footprint di memoria relativamente ridotto.

Note

  1. ↑ (EN) Michael Stutz, The Linux Cookbook: Tips and Techniques for Everyday Use, 2ª ed., 2004, ISBN 978-1-59327-031-5.
  2. ↑ Loki Software, Inc e John R. Hall, Programming Linux Games, 2001, p. 68, ISBN 978-1-886411-49-4.
  3. ↑ [rfc:1951 rfc1951]
  4. ↑ (EN) zlib Home Site, su zlib.net. URL consultato il 25 gennaio 2023.
  5. ↑ (EN) Why does cURL use zlib?, su Stack Overflow.
  6. ↑ (EN) Carter Shanklin, ORCFile in HDP 2: Better Compression, Better Performance, su Cloudera Blog, 6 settembre 2013. URL consultato il 25 gennaio 2023.
  7. ↑ (EN) dotnet-bot, DeflateStream Class (System.IO.Compression), su learn.microsoft.com. URL consultato il 25 gennaio 2023.
  8. ↑ (EN) How Compression Works for InnoDB Tables, su dev.mysql.com.

Bibliografia

Voci correlate

Altri progetti

Collegamenti esterni

  Portale Software libero: accedi alle voci di Wikipedia che trattano di software libero