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 gratuito , 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 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

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- a través de libros de Google.
  3. ^ Hall, John R. (22 de octubre de 2001). Programación de juegos Linux. Sin prensa de almidón. Loki Software, Inc. ISBN 9781886411494- a través de libros de Google.
  4. ^ ab RFC 1950. doi : 10.17487/RFC1950 .
  5. ^ RFC 1951. doi : 10.17487/RFC1951 .
  6. ^ RFC 1952. doi : 10.17487/RFC1952 .
  7. ^ rfc1951
  8. ^ Gailly, Jean-loup; Adler, Mark (18 de abril de 2002), Aplicaciones zlib
  9. ^ "c++ - ¿Por qué cURL usa zlib?". Desbordamiento de pila .
  10. ^ https://blog.cloudera.com/orcfile-in-hdp-2-better-compression-better-performance/ citar orc.compress=Zlibcomo predeterminado.
  11. ^ System.IO.Compression.DeflateStream. Biblioteca MSDN.
  12. ^ "MySQL :: Manual de referencia de MySQL 8.0 :: 15.9.1.5 Cómo funciona la compresión para tablas InnoDB". dev.mysql.com .
  13. ^ "githubIntel ZLIB". github . 25 de enero de 2024 . Consultado el 25 de enero de 2024 .
  14. ^ "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.
  15. ^ 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.

enlaces externos