stringtranslate.com

Desinflar

En informática , Deflate (estilizado como DEFLATE y también llamado Flate [1] [2] ) es un formato de archivo de compresión de datos sin pérdida que utiliza una combinación de codificación LZ77 y Huffman . Fue diseñado por Phil Katz para la versión 2 de su herramienta de archivo PKZIP . Deflate se especificó más tarde en RFC 1951 (1996). [3]

Katz también diseñó el algoritmo original utilizado para construir los flujos Deflate. Este algoritmo fue patentado como patente estadounidense 5.051.745 y asignado a PKWARE, Inc. [4] [5] Como se indica en el documento RFC, se pensaba ampliamente que un algoritmo que produjera archivos Deflate se podía implementar de una manera no cubierta por las patentes. [3] Esto llevó a su uso generalizado, por ejemplo, en archivos comprimidos gzip y archivos de imagen PNG , además del formato de archivo ZIP para el que Katz lo diseñó originalmente. Desde entonces, la patente ha expirado.

Formato de transmisión

Un flujo de Deflate consta de una serie de bloques. Cada bloque está precedido por un encabezado de 3 bits :

La opción de bloque almacenado agrega una sobrecarga mínima y se utiliza para datos que no se pueden comprimir.

La mayoría de los datos comprimibles se codificarán mediante el método 10, la codificación Huffman dinámica , que produce un árbol Huffman optimizado y personalizado para cada bloque de datos individualmente. Las instrucciones para generar el árbol Huffman necesario aparecen inmediatamente después del encabezado del bloque. La opción Huffman estática se utiliza para mensajes cortos, donde el ahorro fijo obtenido al omitir el árbol supera la pérdida de compresión porcentual debido al uso de un código no óptimo (por lo tanto, técnicamente no Huffman).

La compresión se consigue mediante dos pasos:

Eliminación de cadenas duplicadas

Dentro de los bloques comprimidos, si se detecta una serie duplicada de bytes (una cadena repetida), se inserta una referencia inversa que enlaza con la ubicación anterior de esa cadena idéntica. Una coincidencia codificada con una cadena anterior consta de una longitud de 8 bits (3–258 bytes) y una distancia de 15 bits (1–32.768 bytes) hasta el comienzo del duplicado. Se pueden realizar referencias inversas relativas a lo largo de cualquier número de bloques, siempre que la distancia aparezca dentro de los últimos 32  KiB de datos sin comprimir decodificados (denominados ventana deslizante ).

Si la distancia es menor que la longitud, el duplicado se superpone a sí mismo, lo que indica repetición. Por ejemplo, una serie de 10 bytes idénticos se puede codificar como un byte, seguido de un duplicado de longitud 9, comenzando con el byte anterior.

La búsqueda de subcadenas duplicadas en el texto anterior es la parte computacionalmente más costosa del algoritmo DEFLATE y la operación a la que afectan las configuraciones del nivel de compresión.

Reducción de bits

La segunda etapa de compresión consiste en reemplazar los símbolos comúnmente utilizados por representaciones más cortas y los símbolos menos utilizados por representaciones más largas. El método utilizado es la codificación de Huffman , que crea un árbol sin prefijo de intervalos no superpuestos, donde la longitud de cada secuencia es inversamente proporcional al logaritmo de la probabilidad de que ese símbolo deba ser codificado. Cuanto más probable sea que un símbolo deba ser codificado, más corta será su secuencia de bits.

Se crea un árbol que contiene espacio para 288 símbolos:

Un código de longitud de coincidencia siempre estará seguido de un código de distancia. Según el código de distancia leído, se pueden leer más bits "extra" para generar la distancia final. El árbol de distancia contiene espacio para 32 símbolos:

Tenga en cuenta que para los símbolos de distancia de coincidencia 2 a 29, la cantidad de bits adicionales se puede calcular como .

Los dos códigos (el árbol literal/de longitud de 288 símbolos y el árbol de distancia de 32 símbolos) se codifican como códigos Huffman canónicos , dando la longitud en bits del código para cada símbolo. Las longitudes en bits se codifican en longitud de ejecución para producir una representación lo más compacta posible. Como alternativa a la inclusión de la representación en árbol, la opción "árbol estático" proporciona árboles Huffman fijos estándar. El tamaño comprimido utilizando los árboles estáticos se puede calcular utilizando las mismas estadísticas (la cantidad de veces que aparece cada símbolo) que se utilizan para generar los árboles dinámicos, por lo que es fácil para un compresor elegir el que sea más pequeño.

Codificador/compresor

Durante la etapa de compresión, es el codificador el que elige la cantidad de tiempo que se dedica a buscar cadenas coincidentes. La implementación de referencia zlib/gzip permite al usuario seleccionar entre una escala móvil de probable nivel de compresión resultante frente a velocidad de codificación. Las opciones varían desde 0(no intentar la compresión, solo almacenar sin comprimir) hasta 9representar la capacidad máxima de la implementación de referencia en zlib/gzip.

Se han producido otros codificadores Deflate, todos los cuales también producirán un flujo de bits compatible capaz de ser descomprimido por cualquier decodificador Deflate existente. Es probable que las diferentes implementaciones produzcan variaciones en el flujo de bits codificado final producido. El objetivo de las versiones no zlib de un codificador ha sido normalmente producir un flujo codificado más pequeño y comprimido de manera más eficiente.

Deflate64/Desinflado mejorado

Deflate64, especificado por PKWARE, es una variante propietaria de Deflate. Es fundamentalmente el mismo algoritmo. Lo que ha cambiado es el aumento del tamaño del diccionario de 32 KB a 64 KB, una extensión de los códigos de distancia a 16 bits para que puedan abordar un rango de 64 KB, y el código de longitud, que se extiende a 16 bits para que pueda definir longitudes de tres a 65.538 bytes. [6] Esto hace que Deflate64 tenga un tiempo de compresión más largo, y potencialmente una relación de compresión ligeramente superior, que Deflate. [7] Varios proyectos libres y/o de código abierto admiten Deflate64, como 7-Zip , [8] mientras que otros, como zlib , no lo hacen, como resultado de la naturaleza propietaria del procedimiento [9] y el aumento de rendimiento muy modesto sobre Deflate. [10]

Uso de Deflate en un nuevo software

Las implementaciones de Deflate están disponibles de forma gratuita en muchos lenguajes. Las aplicaciones escritas en C suelen utilizar la biblioteca zlib (bajo la licencia zlib License ). Las aplicaciones en Borland Pascal (y lenguajes compatibles) pueden utilizar paszlib. Las aplicaciones en C++ pueden aprovechar la biblioteca Deflate mejorada en 7-Zip . Tanto Java como .NET Framework ofrecen compatibilidad inmediata con Deflate en sus bibliotecas (respectivamente, java.util.zipy System.IO.Compression). Las aplicaciones en Ada pueden utilizar Zip-Ada (puro) o ZLib-Ada.

Implementaciones de codificadores

AdvanceCOMP utiliza las versiones de Deflate con mayor relación de compresión en 7-Zip, libdeflate y Zopfli para permitir la recompresión de archivos gzip , PNG , MNG y ZIP con la posibilidad de tamaños de archivo más pequeños que los que zlib puede lograr con las configuraciones máximas. [14]

Codificadores de hardware

Descodificador/descompresor

Inflar es el proceso de decodificación que toma un flujo de bits de Deflate para descomprimirlo y produce correctamente los datos o el archivo original en tamaño completo.

Implementaciones que solo inflan

La intención normal con una implementación alternativa de Inflate es una velocidad de decodificación altamente optimizada o un uso de RAM extremadamente predecible para sistemas integrados con microcontroladores.

Decodificadores de hardware

Véase también

Referencias

  1. ^ Los autores de Go. "paquete flate - compress/flate - Paquetes Go". El lenguaje de programación Go . Google . Consultado el 5 de septiembre de 2023 . El paquete flate implementa el formato de datos comprimidos DEFLATE, descrito en la RFC número 1951.
  2. ^ Adobe Systems Incorporated . «PDF 32000-1:2008: Document management — Portable document format — Part 1: PDF 1.7» (PDF) . Adobe Open Source . Adobe. pág. 23. Consultado el 5 de septiembre de 2023. FlateDecode [...] Descomprime datos codificados con el método de compresión zlib/deflate .
  3. ^ ab Deutsch, L. Peter (mayo de 1996). DEFLATE Compressed Data Format Specification versión 1.3. IETF . pág. 1. seg. Resumen. doi : 10.17487/RFC1951 . RFC 1951 . Consultado el 23 de abril de 2014 .
  4. ^ Patente estadounidense 5051745, Katz, Phillip W. , "Buscador de cadenas y compresor que lo utiliza", publicada el 24 de septiembre de 1991, expedida el 24 de septiembre de 1991, asignada a PKWare Inc. 
  5. ^ David, Salomon (2007). Compresión de datos: la referencia completa (4.ª ed.). Springer. pág. 241. ISBN 978-1-84628-602-5.
  6. ^ "Binary Essence – Deflate64". Archivado desde el original el 21 de junio de 2017. Consultado el 22 de mayo de 2011 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  7. ^ "Binary Essence – Comparaciones de compresión del "Corpus de Calgary"". Archivado desde el original el 27 de diciembre de 2017. Consultado el 22 de mayo de 2011 .{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  8. ^ "Conmutador -m (Establecer método de compresión)". sevenzip.osdn.jp . Archivado desde el original el 2022-04-09 . Consultado el 2023-01-21 .
  9. ^ Historia de los algoritmos de compresión de datos sin pérdida – Deflate64
  10. ^ Preguntas frecuentes de zlib: ¿zlib admite el nuevo formato "Deflate64" introducido por PKWare?
  11. ^ "Plan 9 de /n/sources/plan9/sys/src/libflate de Bell Labs". plan9.bell-labs.com . Lucent Technologies. Archivado desde el original el 15 de marzo de 2006.
  12. ^ "Compresión DEFLATE de alto rendimiento con optimizaciones para conjuntos de datos genómicos". Intel Software . 1 de octubre de 2019 . Consultado el 18 de enero de 2020 .
  13. ^ "libdeflate". Biblioteca altamente optimizada para compresión y descompresión DEFLATE/zlib/gzip .
  14. ^ Mazzoleni, Andrea (21 de febrero de 2023). "amadvance/advancecomp". GitHub .
  15. ^ "Procesador Intel® Xeon® serie E5-2600 y E5-2400 con chipset de comunicaciones Intel® serie 89xx" . Consultado el 18 de mayo de 2016 .
  16. ^ ab "Presentación de IBM z15: la plataforma empresarial para multicloud híbrido de misión crítica". IBM . 12 de septiembre de 2019 . Consultado el 1 de noviembre de 2021 .
  17. ^ ab Lascu, Octavian (28 de abril de 2021). Guía técnica de IBM z15 (8562), página 97. IBM Redbooks. ISBN 9780738458991. Recuperado el 1 de noviembre de 2021 .
  18. ^ ab "Compresión de datos mediante la biblioteca zlibNX - Documentación de IBM". IBM . Consultado el 1 de noviembre de 2021 .
  19. ^ ab "Explotación de la aceleración en el núcleo de los procesadores POWER para AIX" . Consultado el 1 de noviembre de 2021 .

Enlaces externos