LZ4

Материал из Википедии — свободной энциклопедии
LZ4
Тип Сжатие данных
Автор Yann Collet
Разработчик Yann Collet
Написана на C
Операционная система кросс-платформенное
Первый выпуск апрель 24, 2011 (2011-04-24)
Аппаратная платформа переносимое
Последняя версия
Репозиторий github.com/lz4/lz4
Состояние активен
Лицензия Simplified BSD License
Сайт lz4.org (англ.)

LZ4 — алгоритм сжатия данных без потерь, ориентированный на высокую скорость сжатия и распаковки. Он относится к семейству методов сжатия LZ77, работающих с байтовыми потоками. Отличается компактным кодом для распаковки.

Особенности

Алгоритм LZ4 имеет немного меньшую степень сжатия, чем более ранний метод сжатия

DEFLATE. Однако, LZ4 по скорости сжатия близок к LZO и в несколько раз быстрее gzip’а, а скорость распаковки у LZ4 значительно выше, чем у LZO.[2]

Метод сжатия

Сжатые данные в методе LZ4 представляются в виде последовательности записей. Каждая запись начинается с токена — одного байта, разбитого на два 4-битных поля. Первое поле определяет количество байтов литеральной последовательности — то есть строки, которая при распаковке будет скопирована в выходной поток. Второе поле определяет длину строки, копируемой из уже распакованного буфера (из словаря). Значение 0 в поле соответствует минимальной длине совпадения в 4 байта. Значение 15 в поле является признаком использования дополнительного байта, значение которого будет прибавлено к длине. Если дополнительный байт длины равен 255, то к полю длины прибавляется значение ещё одного байта, что позволяет указывать произвольные длины через серию байтов со значением 255 (0xff). Строка литерала в сжатой последовательности следует за токеном и дополнительными байтами длин литерала. Затем записывается смещение совпадения в выходном буфере и дополнительные байты длины совпадения.[3][4][5] Дополнительно могут использоваться фреймы, указывающие на размер данных и содержащие контрольные суммы[6][7]. Энтропийное кодирование (такое, как Код Хаффмана) не применяется.

Сжатие может осуществляться над потоком байтов или над последовательностью блоков. Достигаемая степень сжатия зависит от объёма работы, выполняемой для поиска совпадений. Если потратить больше времени на сжатие, то будет получен более компактный сжатый файл, а скорость его распаковки вырастет.

Реализация

Оригинальная реализация LZ4 написана на

Zstd
Яна Колле.

Примечания

  1. Release v1.9.4
  2. Michael Larabel. Support For Compressing The Linux Kernel With LZ4. Phoronix (28 января 2013). Дата обращения: 28 августа 2015. Архивировано 24 сентября 2015 года.
  3. Yann Collet. RealTime Data Compression (26 мая 2011). Дата обращения: 28 августа 2015. Архивировано 23 сентября 2015 года.
  4. ticki. How LZ4 works (25 октября 2016). Дата обращения: 29 июня 2017. Архивировано из оригинала 27 июня 2017 года.
  5. LZ4 - Extremely fast compression. Дата обращения: 17 октября 2018. Архивировано из оригинала 27 сентября 2018 года.
  6. RealTime Data Compression: LZ4 Frame format : Final specifications. Дата обращения: 17 октября 2018. Архивировано 17 октября 2018 года.
  7. LZ4 - Extremely fast compression. Дата обращения: 17 октября 2018. Архивировано из оригинала 27 сентября 2018 года.
  8. Fast Compression algorithm http://www.lz4.org Проект LZ4 на сайте GitHub
  9. Jonathan Corbet. Kernel development. LWN.net (19 июля 2013). Дата обращения: 28 августа 2015. Архивировано 15 декабря 2017 года.
  10. Архивированная копия. Дата обращения: 17 октября 2018. Архивировано 17 октября 2018 года.
  11. FreeBSD 9.2-RELEASE Release Notes. FreeBSD (13 ноября 2013). Дата обращения: 28 августа 2015. Архивировано 12 ноября 2020 года.
  12. LZ4 Compression. illumos. Дата обращения: 28 августа 2015. Архивировано из оригинала 9 октября 2018 года.
  13. #3035 LZ4 compression support in ZFS and GRUB Проект LZ4 на сайте GitHub
  14. Features: lz4 compression. OpenZFS. Дата обращения: 28 августа 2015. Архивировано 25 апреля 2020 года.
  15. Phillip Lougher. Squashfs: Add LZ4 compression configuration option (27 ноября 2014). Дата обращения: 28 августа 2015.

Ссылки