zlib ( / ˈ z iː l ɪ b / o " zeta -lib ", / ˈ z iː t ə ˌ l ɪ b / ) [2] [3] es una biblioteca de software utilizada para la compresión de datos , así como un formato de datos. [4] zlib fue escrito por Jean-loup Gailly y Mark Adler y es una abstracción del algoritmo de compresión DEFLATE utilizado en su programa de compresión de archivos gzip . zlib también es un componente crucial de muchas plataformas de software, incluidas Linux , macOS e iOS . También se ha utilizado en consolas de juegos como PlayStation 4 , PlayStation 3 , Wii U , Wii , Xbox One y Xbox 360 .
La primera versión pública de Zlib, 0.9, se lanzó el 1 de mayo de 1995 y originalmente estaba destinada a su uso con la biblioteca de imágenes libpng . Es software gratuito , distribuido bajo la licencia zlib .
Los datos comprimidos DEFLATE sin procesar (RFC 1951) [5] generalmente se escriben con un contenedor zlib o gzip que encapsula los datos, agregando un encabezado y un pie de página. Esto proporciona identificación de flujo y detección de errores que no proporcionan los datos DEFLATE sin procesar.
El contenedor zlib (RFC 1950) [4] es más pequeño que el contenedor gzip (RFC 1952), [6] ya que este último almacena un nombre de archivo y otra información del sistema de archivos.
A partir de septiembre de 2018 [update], zlib solo admite un algoritmo, llamado DEFLATE , que utiliza una combinación de una variación de LZ77 (Lempel-Ziv 1977) y codificación Huffman . [7] Este algoritmo proporciona una buena compresión en una amplia variedad de datos con un uso mínimo de recursos del sistema. Este es también el algoritmo utilizado en el formato de archivo Zip . El encabezado tiene en cuenta otros algoritmos, pero ninguno está implementado actualmente.
zlib proporciona funciones para el control del uso del procesador y la memoria. Se puede proporcionar un valor de nivel de compresión que intercambie velocidad por compresión. También existen funciones para conservar memoria, útiles en entornos de memoria restringida, como algunos sistemas integrados.
La compresión se puede optimizar para tipos específicos de datos. Si se utiliza la biblioteca para comprimir siempre tipos específicos de datos, utilizar una estrategia específica puede mejorar la compresión y el rendimiento. Por ejemplo, si los datos contienen longitudes largas de bytes repetidos, la estrategia de codificación de longitud de ejecución (RLE) puede dar buenos resultados a mayor velocidad. Para datos generales, se prefiere la estrategia predeterminada.
Se pueden detectar y omitir errores en los datos comprimidos. Además, si se escriben puntos de "vaciado completo" en el flujo comprimido, entonces se pueden omitir los datos corruptos y la descompresión se resincronizará en el siguiente punto de vaciado, aunque no se proporciona ninguna recuperación de errores de los datos corruptos. Los puntos de descarga total son útiles para grandes flujos de datos en canales no confiables, donde parte de la pérdida de datos no es importante, como en algunas aplicaciones multimedia. Sin embargo, crear muchos puntos de descarga puede afectar tanto la velocidad como la cantidad (relación) de compresión.
No hay límite para la longitud de los datos que se pueden comprimir o descomprimir. Las llamadas repetidas a la biblioteca permiten manejar un número ilimitado de bloques de datos. Algunos códigos auxiliares (contadores) pueden sufrir desbordamiento en flujos de datos largos, pero esto no afecta la compresión o descompresión real.
Al comprimir un flujo de datos largo (o infinito), es recomendable escribir puntos de descarga completa regulares.
Hoy en día, zlib es una especie de estándar de facto , hasta el punto de que zlib y DEFLATE a menudo se usan indistintamente en documentos estándar, y miles de aplicaciones dependen de él para la compresión, ya sea directa o indirectamente. [8] Estos incluyen:
zlib también se utiliza en muchos dispositivos integrados, como el iPhone de Apple y la PlayStation 3 de Sony , porque el código es portátil, tiene licencia amplia y ocupa una memoria relativamente pequeña.
zlib, una biblioteca de uso común construida sobre una base de código antigua, también es bifurcada con frecuencia por terceros que afirman haber mejorado esta biblioteca:
orc.compress=Zlib
como predeterminado.