De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

zlib es una biblioteca de software que se utiliza para la compresión de datos . 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, fue lanzada el 1 de mayo de 1995 y originalmente estaba pensada para su uso con la biblioteca de imágenes libpng . Es un software gratuito , distribuido bajo la licencia zlib .

Capacidades [ editar ]

Encapsulación [ editar ]

Los datos comprimidos de zlib se escriben normalmente con un contenedor gzip o zlib. El contenedor encapsula los datos DEFLATE sin procesar agregando un encabezado y un final. Esto proporciona identificación de flujo y detección de errores que no son proporcionados por los datos DEFLATE sin procesar.

El encabezado gzip, utilizado en el omnipresente formato de archivo gzip , es más grande que el encabezado zlib, ya que almacena un nombre de archivo y otra información del sistema de archivos.

Algoritmo [ editar ]

A partir de septiembre de 2018 , zlib solo admite un algoritmo, llamado DEFLATE , que usa una combinación de una variación de LZ77 (Lempel – Ziv 1977) y codificación de Huffman . [1] Este algoritmo proporciona una buena compresión en una amplia variedad de datos con un uso mínimo de los recursos del sistema. Este también es el algoritmo utilizado en el formato de archivo Zip . El encabezado tiene en cuenta otros algoritmos, pero ninguno está implementado actualmente.

Uso de recursos [ editar ]

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 hay instalaciones para conservar la memoria, útiles en entornos de memoria restringida, como algunos sistemas integrados.

Estrategia [ editar ]

La compresión se puede optimizar para tipos específicos de datos. Si uno está usando la biblioteca para comprimir siempre tipos específicos de datos, entonces el uso de 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 [ editar ]

Los errores en los datos comprimidos se pueden detectar y omitir. Además, si se escriben puntos de "descarga total" en la secuencia comprimida, se pueden omitir los datos corruptos y la descompresión se resincronizará en el siguiente punto de descarga, aunque no se proporciona una recuperación de errores de los datos corruptos. Los puntos de descarga total son útiles para grandes flujos de datos en canales poco confiables, donde algunas pérdidas de datos no son importantes, como en algunas aplicaciones multimedia. Sin embargo, la creación de muchos puntos de descarga puede afectar tanto a la velocidad como a la cantidad (relación) de compresión.

Longitud de los datos [ editar ]

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 un desbordamiento para 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 regulares de descarga completa.

Aplicaciones [ editar ]

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 de estándares, con miles de aplicaciones que dependen de él para la compresión, ya sea directa o indirectamente. [2] Estos incluyen:

  • El kernel de Linux , donde zlib se usa 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 usa zlib para implementar HTTP / 1.1 .
  • De manera similar, la biblioteca cURL usa zlib para descomprimir las respuestas HTTP. [3]
  • 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 usa zlib para leer y escribir las partes comprimidas DEFLATE de los formatos de transmisión , como Matroska .
  • El sincronizador de archivos remoto rsync , que usa 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 Apache ORC usa ZLib como su método de compresión predeterminado. [4]
  • El sistema de control de versiones de Git usa 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. [5]
  • La utilidad "desinflar" en TORNADO como parte del sistema operativo VxWorks creado por Wind River Systems utiliza zlib para comprimir imágenes de ROM de arranque.
  • zlib-flate(1), programa de compresión raw zlib, parte de qpdf

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 liberal y ocupa una memoria relativamente pequeña.

Horquillas [ editar ]

Una biblioteca de uso común construida sobre una base de código antiguo, zlib también es frecuentemente bifurcada por terceros que afirman mejoras en esta biblioteca:

  • Intel tiene una bifurcación de alto rendimiento de zlib. [6]
  • CloudFlare mantiene una bifurcación de alto rendimiento con mejoras "masivas". [7]
  • Zlib-ng es una bifurcación de reemplazo de zlib con optimizaciones para sistemas de "próxima generación".

Ver también [ editar ]

  • DESINFLAR
  • gzip
  • LZ77 y LZ78 § LZ77
  • Zip (formato de archivo)
  • Licencia zlib
  • Zopfli

Referencias [ editar ]

  1. ^ https://tools.ietf.org/html/rfc1951
  2. ^ Gailly, Jean-loup; Adler, Mark (18 de abril de 2002), zlib Applications
  3. ^ https://stackoverflow.com/questions/26244134/why-does-curl-use-zlib
  4. ^ https://blog.cloudera.com/orcfile-in-hdp-2-better-compression-better-performance/ citeorc.compress=Zlibcomo predeterminado.
  5. ^ System.IO.Compression.DeflateStream . Biblioteca de MSDN.
  6. ^ "Funciones de codificación Intel® IPP ZLIB" . Software de Intel . 31 de julio de 2019 . Consultado el 18 de enero de 2020 .
  7. ^ "Lucha contra el cáncer: el beneficio inesperado de Open Sourcing Our Code" . El blog de Cloudflare . 8 de julio de 2015.

Enlaces externos [ editar ]

  • Página web oficial
  • RFC  1950 - Formato de datos comprimidos ZLIB
  • RFC  1951 - DESINFLAR formato de datos comprimidos
  • RFC  1952 : formato de archivo GZIP