Zlib es una biblioteca de software utilizada para la compresión de datos. Fue escrita por Jean-loup Gailly y Mark Adler y es una abstracción del algoritmo DEFLATE de compresión utilizado en el programa de compresión de archivos gzip. Zlib es también un componente crucial de muchas plataformas de software incluyendo Linux, Mac OS X e iOS. También ha sido utilizado en consolas de videojuegos como la PlayStation 4, PlayStation 3, Wii U, Wii, Xbox One y Xbox 360.
zlib | ||
---|---|---|
Parte de Info-ZIP | ||
Información general | ||
Tipo de programa | Compresión de datos | |
Desarrollador |
| |
Lanzamiento inicial | 01 de mayo de 1995 | |
Licencia | Licencia Zlib | |
Información técnica | ||
Programado en | C | |
Versiones | ||
Última versión estable | 1.3.1 ( 22 de enero de 2024) | |
Enlaces | ||
Sitio web oficial
Repositorio de código
| ||
La primera versión pública de zlib, 0.9, fue liberada el 1 de mayo de 1995 y fue originalmente pensada para usarla con la biblioteca libpng. Es software libre distribuido bajo la Licencia Zlib.
Los datos comprimidos por zlib típicamente son escritos por un wrapper de gzip o zlib. El wrapper encapsula los datos crudos de DEFLATE añadiendo una cabecera y una cola. Esto proporciona identificación del stream y detección de errores que no son proporcionados en los datos en crudo de DEFLATE.
El encabezado de gzip, usado ubicuamente en el formato de fichero gzip, es mayor que la cabecera de zlib debido a que almacena el nombre del fichero y otra información del sistema de ficheros.
A septiembre de 2018, zlib solo soporta un algoritmo, llamado DEFLATE, que es una variación del algoritmo LZ77 (Lempel–Ziv 1977). Este algoritmo proporciona buena compresión en una amplia variedad de datos con un uso mínimo de recursos de sistema. Es también el algoritmo usado en el formato de archivo ZIP.
El encabezado permite otros algoritmos, pero actualmente ningún otro está implementado.
Zlib proporciona facilidades para el control del uso del procesador y de memoria. Se le puede indicar un parámetro para aumentar la velocidad en detrimento de la compresión. También se puede limitar el uso de la memoria.
La compresión puede ser optimizada para ciertos datos. Si usa datos que siempre mantengan cierta estructura, usar una estrategia específica puede mejorar el ratio de compresión y de rendimiento. Por ejemplo, si los datos contienen longitudes largas de bytes repetidos, la estrategia RLE (codificación RLE) puede dar buenos resultados de velocidad. Para datos generales, la configuración por defecto es la preferida.
Los errores en los datos comprimidos pueden ser detectados y saltados. Además, si se escriben puntos "full-flush" a la secuencia comprimida, los datos corruptos pueden ser omitidos y la descompresión se resincronizará en el siguiente punto "full-flush" aunque no se proporcionan mecanismos de recuperación de los errores en los datos. Este tipo de puntos son útiles para grandes secuencias de datos en canales no confiables, donde cierta pérdida de datos no es importante, como en algunas aplicaciones multimedia. Sin embargo, crear muchos de estos "flush-points" puede afectar a la velocidad y al ratio de compresión.
No hay ningún límite a la longitud de datos que pueden ser comprimidos o descomprimidos. Repetidas llamadas a la biblioteca permiten un ilimitado número de bloques de datos. Algunos contadores pueden sufrir de desbordamiento de buffers pero esto no afecta la compresión o descompresión.
Cuando el conjunto de datos es muy largo(o infinito) se recomienda regularmente escribir puntos "full-flush".
Hoy, zlib es un estándar de facto, al punto que zlib y DEFLATE son a menudo usados indistintamente en documentos, con miles de aplicaciones que confían en su compresión, directamente o indirectamente.[1] Esto incluye:
zlib es también utilizado en muchos dispositivos embebidos, como el iPhone de Apple y la Sony PlayStation 3, porque el código es portátil, tiene licencia libre, y poco uso de memoria.