Articulo de referencia

zlib

{{cite web |title=zlib Home Site |website=zlib.net |url=https://zlib.net |archive-url=https://web.archive.org/web/20060602151730/https://zlib.net/ |archive-date=2 June 2006 |quo...

zlib ( / ˈ z l ɪ b / o " zeta -lib", / ˈ z 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:

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:

Véase también

Referencias

  1. "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).
  2. "Notas de la versión 1.3.2 de zlib" . Archivado del original el 17 de febrero de 2026.
  3. 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.
  4. 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.
  5. "Manual de zlib 1.3.1" . zlib.net . Archivado del original el 8 de febrero de 2024.
  6. RFC 1950 . IETF . doi : 10.17487/RFC1950 .
  7. RFC 6713 . IETF . doi : 10.17487/RFC6713 .
  8. Agradecimientos . IETF . pág. 8. doi : 10.17487/RFC1950 . RFC 1950. Jean-Loup Gailly y Mark Adler diseñaron el formato zlib y ...  
  9. 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) . 
  10. 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, ...   
  11. Formato de datos . IETF . pág. 4. doi : 10.17487/RFC1950 . RFC 1950 . 
  12. RFC 1951 . IETF . doi : 10.17487/RFC1951 .
  13. 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.
  14. "c++ - ¿Por qué cURL usa zlib?" . Stack Overflow .
  15. "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 .
  16. System.IO.Compression.DeflateStream Archivado el 6 de febrero de 2016 en Wayback Machine . Biblioteca MSDN.
  17. Manual de comandos generales de Debianzlib-flate(1)  
  18. "qpdf" . Archivado del original el 11 de julio de 2024. Consultado el 28 de marzo de 2021 .
  19. "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 .  
  20. "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 .
  21. "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 .
  22. 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 .