LZ4 es un algoritmo de compresión de datos sin pérdidas que se centra en la velocidad de compresión y descompresión. Pertenece a la familia LZ77 de esquemas de compresión orientados a bytes.
Autor (es) original (es) | Yann Collet |
---|---|
Desarrollador (es) | Yann Collet |
Versión inicial | 24 de abril de 2011 |
Lanzamiento estable | 1.9.3 / 16 de noviembre de 2020 [1] |
Repositorio | |
Escrito en | C |
Sistema operativo | Multiplataforma |
Plataforma | Portátil |
Tipo | Compresión de datos |
Licencia | Licencia BSD simplificada |
Sitio web | lz4 |
número mágico | 04 22 4d 18 [2] |
---|---|
Tipo de formato | Compresión de datos |
Sitio web | https://github.com/lz4/lz4/blob/master/doc/lz4_Frame_format.md |
Características
El algoritmo LZ4 tiene como objetivo proporcionar un buen equilibrio entre velocidad y relación de compresión. Podría tener una relación de compresión más pequeña que el algoritmo LZO , que a su vez es peor que los algoritmos como DEFLATE . Sin embargo, las velocidades de compresión son similares a LZO y varias veces más rápidas que DEFLATE, mientras que las velocidades de descompresión pueden ser significativamente más altas que LZO. [3]
Diseño
LZ4 solo usa una etapa de coincidencia de diccionario (LZ77) y, a diferencia de otros algoritmos de compresión comunes, no la combina con una etapa de codificación de entropía (por ejemplo, codificación de Huffman en DEFLATE). [4] [5]
El algoritmo LZ4 representa los datos como una serie de secuencias. Cada secuencia comienza con un token de un byte que se divide en dos campos de 4 bits. El primer campo representa el número de bytes literales que se copiarán en la salida. El segundo campo representa el número de bytes que se copiarán del búfer de salida ya descodificado (donde 0 representa la longitud mínima de coincidencia de 4 bytes). Un valor de 15 en cualquiera de los campos de bits indica que la longitud es mayor y hay un byte extra de datos que se agregará a la longitud. Un valor de 255 en estos bytes adicionales indica que se agregará otro byte más. Por lo tanto, las longitudes arbitrarias se representan mediante una serie de bytes adicionales que contienen el valor 255. La cadena de literales viene después del token y los bytes adicionales necesarios para indicar la longitud de la cadena. A esto le sigue un desplazamiento que indica cuánto tiempo atrás en el búfer de salida para comenzar a copiar. Los bytes adicionales (si los hay) de la longitud coincidente se encuentran al final de la secuencia. [6] [7]
La compresión se puede realizar en un flujo o en bloques. Se pueden lograr relaciones de compresión más altas invirtiendo más esfuerzo en encontrar las mejores coincidencias. Esto da como resultado una salida más pequeña y una descompresión más rápida.
Implementación
La implementación de referencia en C de Yann Collet tiene una licencia BSD. Hay puertos y enlaces en varios lenguajes, incluidos Java , C # y Python . [8] El sistema Apache Hadoop utiliza este algoritmo para una compresión rápida. LZ4 también se implementó de forma nativa en el kernel de Linux 3.11. [9] Las implementaciones FreeBSD, Illumos, ZFS en Linux y ZFS-OSX del sistema de archivos ZFS admiten el algoritmo LZ4 para la compresión sobre la marcha. [10] [11] [12] [13] Linux es compatible con LZ4 para SquashFS desde 3.19-rc1. [14] LZ4 también se implementó en el archivador Zstd más nuevo de Yann Collet.
- LZ4 disponible en versión extendida de 7zip: 7-zip-zstd
- Lizard (LZ5 anterior) es una implementación mejorada de LZ4 mediante una descompresión muy rápida de más de 1000 MB por segundo y también está disponible en 7-zip-zstd.
Referencias
- ^ "Última versión de LZ4" . Github . Consultado el 15 de enero de 2021 .
- ^ Collet, Yann. "Descripción del formato de trama LZ4" . Consultado el 7 de octubre de 2020 .
- ^ Michael Larabel (28 de enero de 2013). "Soporte para comprimir el kernel de Linux con LZ4" . Phoronix . Consultado el 28 de agosto de 2015 .
- ^ Collet, Yann (30 de marzo de 2019). "Descripción del formato de bloque LZ4" . GitHub . Consultado el 9 de julio de 2020 .
No hay back-end de codificador de entropía ni capa de encuadre.
- ^ DESINFLAR Especificación de formato de datos comprimidos versión 1.3 . IETF . doi : 10.17487 / RFC1951 . RFC 1951 . Consultado el 9 de julio de 2020 .
- ^ Yann Collet (26 de mayo de 2011). "Compresión de datos en tiempo real" . Consultado el 28 de agosto de 2015 .
- ^ ticki (25 de octubre de 2016). "Cómo funciona LZ4" . Consultado el 29 de junio de 2017 .
- ^ Algoritmo de compresión extremadamente rápida http://www.lz4.org en GitHub
- ^ Jonathan Corbet (19 de julio de 2013). "Desarrollo de kernel" . LWN.net . Consultado el 28 de agosto de 2015 .
- ^ "Notas de la versión de FreeBSD 9.2-RELEASE" . FreeBSD . 13 de noviembre de 2013 . Consultado el 28 de agosto de 2015 .
- ^ "Compresión LZ4" . illumos . Consultado el 28 de agosto de 2015 .
- ^ Soporte de compresión Illumos # 3035 LZ4 en ZFS y GRUB en GitHub
- ^ "Características: compresión lz4" . OpenZFS . Consultado el 28 de agosto de 2015 .
- ^ Phillip Lougher (27 de noviembre de 2014). "Squashfs: agregar la opción de configuración de compresión LZ4" . Consultado el 28 de agosto de 2015 .
enlaces externos
- Página web oficial