Zlib
zlib (o "zeta-lib") es una biblioteca de software utilizada para la compresión de datos. 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 pensada para usarse con la biblioteca de imágenes libpng. Es software libre, distribuido bajo la Licencia zlib.
Capacidades
Encapsulación
Los datos comprimidos de zlib normalmente se escriben con un envoltorio gzip o zlib. El contenedor encapsula los datos de DEFLATE sin procesar agregando un encabezado y un tráiler. Esto proporciona identificación de transmisión y detección de errores que no proporcionan los datos sin procesar de DEFLATE.
El encabezado gzip, utilizado en el omnipresente formato de archivo gzip, es más grande que el encabezado zlib, ya que almacena un nombre de archivo y otra información del sistema de archivos.
Algoritmo
A partir de septiembre de 2018, zlib solo admite un algoritmo, llamado DEFLATE, que usa una combinación de una variación de LZ77 (Lempel–Ziv 1977) y la codificación Huffman. Este algoritmo proporciona una buena compresión en una amplia variedad de datos con un uso mínimo de los 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.
Uso de recursos
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 hay funciones para conservar la memoria, útiles en entornos de memoria restringida, como algunos sistemas integrados.
Estrategia
La compresión se puede optimizar para tipos específicos de datos. Si uno usa la biblioteca para comprimir siempre tipos específicos de datos, entonces usar 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.
Manejo de errores
Los errores en los datos comprimidos pueden detectarse y omitirse. Además, si "totalmente descargado" los puntos se escriben en la transmisión comprimida, luego se pueden omitir los datos corruptos y la descompresión se volverá a sincronizar en el siguiente punto de descarga, aunque no se proporciona una recuperación de errores de los datos corruptos. Los puntos de descarga completa son útiles para grandes flujos de datos en canales poco confiables, donde la pérdida de algunos datos no es importante, como en algunas aplicaciones multimedia. Sin embargo, la creación de muchos puntos de descarga puede afectar tanto la velocidad como la cantidad (proporción) de compresión.
Longitud de datos
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 para flujos de datos largos, pero esto no afecta la compresión o descompresión real.
Al comprimir un flujo de datos largo (o infinito), se recomienda escribir puntos regulares de descarga total.
Aplicaciones
Hoy, zlib es algo así como un estándar de facto, hasta el punto de que zlib y DEFLATE a menudo se usan indistintamente en documentos de estándares, con miles de aplicaciones que dependen de él para la compresión, ya sea directa o indirectamente.. Éstos incluyen:
- El núcleo Linux, donde zlib se utiliza para implementar protocolos de red comprimidos, sistemas de archivos comprimidos y para descomprimir la imagen del núcleo en el momento de arranque.
- GNU Binutils y GNU Debugger (GDB)
- libpng, la implementación de referencia para el formato de imagen PNG, que especifica DEFLATE como la compresión de flujo para sus datos de bitmap.
- libwww, una API para aplicaciones web como navegadores web.
- El Apache HTTP Server, que utiliza zlib para implementar HTTP/1.1.
- Del mismo modo, la biblioteca cURL utiliza zlib para descomprimir las respuestas HTTP.
- El cliente y servidor OpenSSH, que confía en zlib para realizar la compresión opcional ofrecida por el protocolo Secure Shell.
- Las bibliotecas de seguridad OpenSSL y GnuTLS, que pueden utilizar de forma opcional zlib para comprimir conexiones TLS.
- La biblioteca multimedia FFmpeg, que utiliza zlib para leer y escribir las partes de los formatos de transmisión de DEFLATE, como Matroska.
- El sincronizador de archivos remotos rsync, que utiliza zlib para implementar la compresión de protocolo opcional.
- Los gestores de paquetes dpkg y RPM, que utilizan zlib para desempaquetar archivos de paquetes de software comprimido.
- Los sistemas de control de versiones de Apache Subversion y CVS, que utilizan zlib para comprimir el tráfico hacia y desde repositorios remotos.
- El formato de almacenamiento de datos orientado a columna Apache ORC utiliza ZLib como método de compresión predeterminado.
- El sistema de control de la versión Git utiliza zlib para almacenar el contenido de sus objetos de datos (blobs, árboles, commits y etiquetas).
- El PostgreSQL RDBMS utiliza zlib con formato de dump personalizado (pg_dump -Fc) para copias de seguridad de la base de datos.
- El sistema de clase.IO.Compresión.DeflateStream de Microsoft. NET Framework 2.0 y superior.
- La utilidad "deflada" en TORNADO como parte del sistema operativo VxWorks realizado por Wind River Systems utiliza zlib para comprimir imágenes de arranque ROM.
- , programa de compresión de zlib crudo, parte de qpdf
- El MySQL RDBMS utiliza ZLib LZ77 para compresión en Tablas InnoDB
zlib también se usa en muchos dispositivos integrados, como el iPhone de Apple y la PlayStation 3 de Sony, porque el código es portátil, tiene una licencia amplia y ocupa una memoria relativamente pequeña.
Horquillas
Una biblioteca de uso común basada en un código base antiguo, zlib también es bifurcada con frecuencia por terceros que reclaman mejoras en esta biblioteca:
- Intel tiene un tenedor de alto rendimiento de zlib.
- CloudFlare mantiene un tenedor de alto rendimiento con mejoras "masivas".
- Zlib-ng es un tenedor de reemplazo zlib con optimizaciones para sistemas de "proxima generación".
Contenido relacionado
Adobe Photoshop
Dave Winer
Partición de respuesta HTTP