Biblioteca de códecs DEFLATE
zlib ( o " zeta -lib ", ) [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 libre , distribuido bajo la licencia zlib .
Capacidades
Encapsulación
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.
Algoritmo
A partir de septiembre de 2018 [actualizar], 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.
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 existen funciones para conservar 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 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 grandes longitudes 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
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.
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 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.
Aplicaciones
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:
- El kernel de Linux , donde zlib se utiliza para implementar protocolos de red comprimidos, sistemas de archivos comprimidos y para descomprimir la imagen del kernel en el momento del 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 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 usa zlib para descomprimir las respuestas HTTP. [9]
- El cliente y 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 conexiones TLS .
- La biblioteca multimedia FFmpeg , que utiliza zlib para leer y escribir las partes comprimidas con DEFLATE de formatos de transmisión , como Matroska .
- El sincronizador de archivos remoto rsync , que utiliza zlib para implementar la compresión de protocolo opcional.
- Los administradores 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 de Apache ORC utiliza ZLib como método de compresión predeterminado. [10]
- El sistema de control de versiones Git utiliza zlib para almacenar el contenido de sus objetos de datos (blobs, árboles, confirmaciones y etiquetas).
- El RDBMS de PostgreSQL utiliza zlib con formato de volcado personalizado (pg_dump -Fc) para las copias de seguridad de la base de datos.
- La clase System.IO.Compression.DeflateStream de Microsoft .NET Framework 2.0 y superior. [11]
- La utilidad "deflate" en TORNADO como parte del sistema operativo VxWorks creado por Wind River Systems utiliza zlib para comprimir imágenes ROM de arranque.
- zlib-flate, [12] programa de compresión zlib sin formato, parte de qpdf [13]
- MySQL RDBMS utiliza ZLib LZ77 para la compresión en tablas InnoDB [ 14]
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.
tenedores
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:
Ver también
Referencias
- ^ Adler, Mark (22 de enero de 2024). "[Zlib-announce] Lanzamiento de zlib 1.3.1" . Consultado el 23 de enero de 2024 .
- ^ Stutz, Michael (22 de octubre de 2004). El libro de cocina de Linux, segunda edición: consejos y técnicas para el uso diario. Sin prensa de almidón. ISBN 9781593270315. Archivado desde el original el 25 de enero de 2023 . Consultado el 28 de octubre de 2021 a través de Google Books.
- ^ Software Loki; Hall, John R. (22 de octubre de 2001). Programación de juegos Linux. Sin prensa de almidón. ISBN 9781886411494. Archivado desde el original el 11 de julio de 2024 . Consultado el 28 de octubre de 2021 a través de Google Books.
- ^ ab RFC 1950. doi : 10.17487/RFC1950 .
- ^ RFC 1951. doi : 10.17487/RFC1951 .
- ^ RFC 1952. doi : 10.17487/RFC1952 .
- ^ RFC 1951. doi : 10.17487/RFC1951 .
- ^ Gailly, Jean-loup; Adler, Mark (18 de abril de 2002), Aplicaciones zlib, archivado desde el original el 10 de junio de 2019 , consultado el 9 de diciembre de 2007
- ^ "c++ - ¿Por qué cURL usa zlib?". Desbordamiento de pila .
- ^ "ORCFile en HDP 2: mejor compresión, mejor rendimiento". 6 de septiembre de 2013. Archivado desde el 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.
- ^
zlib-flate(1)
– Manual de comandos generales de Debian - ^ "qpdf". Archivado desde el 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 desde el original el 1 de agosto de 2021 . Consultado el 14 de julio de 2021 .
- ^ "githubIntel ZLIB". github . 25 de enero de 2024. Archivado desde el original el 25 de enero de 2024 . Consultado el 25 de enero de 2024 .
- ^ "La lucha contra el cáncer: el beneficio inesperado de obtener nuestro código de forma abierta". El blog de Cloudflare . 8 de julio de 2015. Archivado desde el 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 desde el original el 20 de abril de 2020 . Consultado el 18 de enero de 2020 .
enlaces externos