zlib ( / ˈ z iː l ɪ b / o " zeta -lib", / ˈ z iː t ə ˌ l ɪ b / ) [ 3 ] [ 4 ] es un formato de datos y una biblioteca de software de compresión de datos sin pérdidas creada por Jean-Loup Gailly y Mark Adler . La biblioteca implementa el algoritmo Deflate y admite la compresión y descompresión de datos utilizando el formato de datos zlib , el formato de archivo gzip o simplemente como un flujo Deflate . [ 5 ]
zlib es también un componente crucial de muchas plataformas de software, como Linux , macOS e iOS . Además, se ha utilizado en consolas de videojuegos como PlayStation 4 , PlayStation 3 , Wii U , Wii , Xbox One y Xbox 360 .
La primera versión pública de Zlib, la 0.9, se publicó el 1 de mayo de 1995 y originalmente estaba destinada a usarse con la biblioteca de imágenes libpng . Es software libre , distribuido bajo la licencia zlib .
RFC 1950 especifica el formato de datos zlib. [ 6 ]
Formato de datos
El formato de datos zlib consta de una cabecera de 2 bytes , un campo de cabecera adicional opcional, datos comprimidos con Deflate y un pie de página de 4 bytes .
El orden de bytes es big-endian . [ 9 ] El bit 0 es el bit menos significativo en un byte. [ 10 ]
Biblioteca
Encapsulación
La compresión Deflate suele utilizar el formato de datos zlib o el formato de archivo gzip, que añaden una cabecera y un pie de página a los datos comprimidos. Esto proporciona identificación de flujo y detección de errores, funciones que no ofrece un flujo Deflate.
El formato zlib (de al menos 6 bytes) es más pequeño que el formato gzip (de al menos 18 bytes), ya que este último almacena metadatos del sistema de archivos.
Algoritmo
A partir de septiembre de 2018 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 . [ 12 ] 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 permite el uso de otros algoritmos, pero actualmente no hay ninguno implementado.
Uso de recursos
zlib proporciona herramientas para controlar el uso del procesador y la memoria. Se puede especificar un nivel de compresión que prioriza la velocidad sobre la compresión. También incluye herramientas para ahorrar memoria, útiles en entornos con memoria limitada, como algunos sistemas embebidos.
Estrategia
La compresión se puede optimizar para tipos de datos específicos. Si se utiliza la biblioteca para comprimir siempre tipos de datos concretos, una estrategia específica puede mejorar la compresión y el rendimiento. Por ejemplo, si los datos contienen largas secuencias de bytes repetidos, la codificación de longitud variable (RLE) puede ofrecer buenos resultados a mayor velocidad. Para datos generales, se recomienda la estrategia predeterminada.
Manejo de errores
Los errores en los datos comprimidos pueden detectarse y omitirse. Además, si se escriben puntos de vaciado completo en el flujo comprimido, se pueden omitir los datos corruptos y la descompresión se resincronizará en el siguiente punto de vaciado, aunque no se proporciona recuperación de errores para los datos corruptos. Los puntos de vaciado completo son útiles para grandes flujos de datos en canales poco fiables, donde cierta pérdida de datos no es importante, como en algunas aplicaciones multimedia. Sin embargo, crear muchos puntos de vaciado puede afectar tanto a la velocidad como a la cantidad (relación) de compresión.
longitud de los datos
No existe límite en la longitud de los datos que se pueden comprimir o descomprimir. Las llamadas repetidas a la biblioteca permiten procesar un número ilimitado de bloques de datos. Es posible que algunos códigos auxiliares (contadores) se desborden con flujos de datos largos, pero esto no afecta a la compresión ni a la descompresión en sí.
Al comprimir un flujo de datos largo (o infinito), es recomendable escribir puntos de vaciado completo regulares.
Aplicaciones
Hoy en día, zlib es una especie de estándar de facto , hasta el punto de que zlib y DEFLATE se utilizan a menudo indistintamente en documentos de estándares, y miles de aplicaciones dependen de él para la compresión, ya sea directa o indirectamente. [ 13 ] Estas incluyen:
- El núcleo de Linux , donde se utiliza zlib para implementar protocolos de red comprimidos, sistemas de archivos comprimidos y para descomprimir la imagen del núcleo en el momento del arranque.
- GNU Binutils y GNU Debugger (GDB)
- libpng , la implementación de referencia para el formato de imagen PNG , especifica DEFLATE como la compresión de flujo para sus datos de mapa de bits .
- libwww , una API para aplicaciones web como navegadores web .
- El servidor HTTP Apache , que utiliza zlib para implementar HTTP/1.1 .
- De manera similar, la biblioteca cURL utiliza zlib para descomprimir las respuestas HTTP. [ 14 ]
- El cliente y el servidor OpenSSH , que dependen de zlib para realizar la compresión opcional que ofrece el protocolo Secure Shell .
- Las bibliotecas de seguridad OpenSSL y GnuTLS , que opcionalmente pueden usar zlib para comprimir las conexiones TLS .
- La biblioteca multimedia FFmpeg , que utiliza zlib para leer y escribir las partes comprimidas con DEFLATE de formatos de flujo , como Matroska .
- El sincronizador remoto de archivos rsync , que utiliza zlib para implementar la compresión de protocolo opcional.
- Los gestores de paquetes dpkg y RPM , que utilizan zlib para descomprimir archivos de paquetes de software comprimidos.
- Los sistemas de control de versiones 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 columnas Apache ORC utiliza ZLib como método de compresión predeterminado. [ 15 ]
- El sistema de control de versiones Git utiliza zlib para almacenar el contenido de sus objetos de datos (blobs, árboles, confirmaciones y etiquetas).
- El sistema de gestión de bases de datos relacionales PostgreSQL utiliza zlib con un formato de volcado personalizado (pg_dump -Fc) para las copias de seguridad de la base de datos.
- La clase System.IO.Compression.DeflateStream del Microsoft .NET Framework 2.0 y versiones posteriores. [ 16 ]
- La utilidad "deflate" de TORNADO, que forma parte del sistema operativo VxWorks fabricado por Wind River Systems, utiliza zlib para comprimir las imágenes de la ROM de arranque.
- zlib-flate, [ 17 ] programa de compresión zlib sin procesar, parte de qpdf [ 18 ]
- El RDBMS MySQL utiliza ZLib LZ77 para la compresión en tablas InnoDB [ 19 ].
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 portable, tiene una licencia permisiva y consume relativamente poca memoria .
Horquillas
zlib, una biblioteca de uso común construida sobre un código fuente antiguo, también es frecuentemente bifurcada por terceros que afirman haber introducido mejoras en esta biblioteca:
- Intel tiene una bifurcación de alto rendimiento de zlib. [ 20 ]
- Cloudflare mantiene una bifurcación de alto rendimiento con mejoras "masivas". [ 21 ]
- zlib-ng es una bifurcación de reemplazo de zlib para sistemas de "próxima generación". Elimina el código de solución alternativa para compiladores que no admiten ANSI C , integra las optimizaciones de Cloudflare e Intel, agrega aceleración de hardware ( SIMD y funciones intrínsecas ) y utiliza sanitizadores de código , fuzzing y cobertura de código para ayudar a encontrar errores. [ 22 ]
Véase también
Referencias
- ↑ "Sitio web principal de zlib" . zlib.net . Archivado del original el 2 de junio de 2006.
zlib fue escrito por Jean-Loup Gailly (compresión) y Mark Adler (descompresión).
- ↑ "Notas de la versión 1.3.2 de zlib" . Archivado del original el 17 de febrero de 2026.
- ↑ Stutz, Michael (22 de octubre de 2004). The Linux Cookbook, 2.ª edición: Consejos y técnicas para el uso diario . No Starch Press. ISBN 9781593270315Archivado del original el 25 de enero de 2023. Consultado el 28 de octubre de 2021 a través de Google Books.
- ↑ Loki Software; Hall, John R. (22 de octubre de 2001). Programación de juegos para Linux . No Starch Press. ISBN 9781886411494Archivado del original el 11 de julio de 2024. Consultado el 28 de octubre de 2021 a través de Google Books.
- ↑ "Manual de zlib 1.3.1" . zlib.net . Archivado del original el 8 de febrero de 2024.
- ↑ RFC 1950 . IETF . doi : 10.17487/RFC1950 .
- ↑ RFC 6713 . IETF . doi : 10.17487/RFC6713 .
- ↑ Agradecimientos . IETF . pág. 8. doi : 10.17487/RFC1950 . RFC 1950.
Jean-Loup Gailly y Mark Adler diseñaron el formato zlib
y
... - ↑ Convenciones generales . IETF . pág. 4. doi : 10.17487/RFC1950 . RFC 1950.
Todos los números multibyte en el formato descrito aquí se almacenan con el byte MÁS significativo primero (en la dirección de memoria más baja)
. - ↑ Convenciones generales . IETF . pág. 4. doi : 10.17487/RFC1950 . RFC 1950. ...
,
numeramos los bits de un byte de modo que el bit 0 sea el bit menos significativo,
...
- ↑ Formato de datos . IETF . pág. 4. doi : 10.17487/RFC1950 . RFC 1950 .
- ↑ RFC 1951 . IETF . doi : 10.17487/RFC1951 .
- ↑ Gailly, Jean-loup; Adler, Mark (18 de abril de 2002), Aplicaciones de zlib , archivado del original el 10 de junio de 2019 , consultado el 9 de diciembre de 2007.
- ↑ "c++ - ¿Por qué cURL usa zlib?" . Stack Overflow .
- ↑ "ORCFile en HDP 2: Mejor compresión, mejor rendimiento" . 6 de septiembre de 2013. Archivado del original el 6 de agosto de 2020. Consultado el 16 de mayo de 2020 .
- ↑ System.IO.Compression.DeflateStream Archivado el 6 de febrero de 2016 en Wayback Machine . Biblioteca MSDN.
- ↑ – Manual de comandos generales de Debian
- ↑ "qpdf" . Archivado del original el 11 de julio de 2024. Consultado el 28 de marzo de 2021 .
- ↑ "MySQL :: Manual de referencia de MySQL 8.0 :: 15.9.1.5 Cómo funciona la compresión para tablas InnoDB" . dev.mysql.com . Archivado del original el 1 de agosto de 2021. Consultado el 14 de julio de 2021 .
- ↑ "github Intel ZLIB" . github . 25 de enero de 2024. Archivado del original el 25 de enero de 2024. Consultado el 25 de enero de 2024 .
- ↑ "Luchando contra el cáncer: el beneficio inesperado de publicar nuestro código como código abierto" . El blog de Cloudflare . 8 de julio de 2015. Archivado del original el 21 de septiembre de 2019. Consultado el 18 de enero de 2020 .
- ↑ Rosbach, HK (24 de febrero de 2023). "zlib-ng/zlib-ng: reemplazo de zlib con optimizaciones para sistemas de "próxima generación"" . GitHub . zlib-ng. Archivado del original el 20 de abril de 2020. Recuperado el 18 de enero de 2020 .
Enlaces externos
- Software de 1995
- Bibliotecas de C (lenguaje de programación)
- Bibliotecas informáticas gratuitas
- Software gratuito de compresión de datos
- Software libre programado en C
- Software que utiliza la licencia zlib.