stringtranslate.com

zlib

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

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

  1. ^ Adler, Mark (22 de enero de 2024). "[Zlib-announce] Lanzamiento de zlib 1.3.1" . Consultado el 23 de enero de 2024 .
  2. ^ 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.
  3. ^ 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.
  4. ^ ab RFC 1950. doi : 10.17487/RFC1950 .
  5. ^ RFC 1951. doi : 10.17487/RFC1951 .
  6. ^ RFC 1952. doi : 10.17487/RFC1952 .
  7. ^ RFC 1951. doi : 10.17487/RFC1951 .
  8. ^ 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
  9. ^ "c++ - ¿Por qué cURL usa zlib?". Desbordamiento de pila .
  10. ^ "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 .
  11. System.IO.Compression.DeflateStream Archivado el 6 de febrero de 2016 en Wayback Machine . Biblioteca MSDN.
  12. ^ zlib-flate(1)  –  Manual de comandos generales de Debian
  13. ^ "qpdf". Archivado desde el original el 11 de julio de 2024 . Consultado el 28 de marzo de 2021 .
  14. ^ "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 .
  15. ^ "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 .
  16. ^ "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 .
  17. ^ 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