Interested Article - LZ4

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

Особенности

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

Метод сжатия

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

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

Реализация

Оригинальная реализация LZ4 написана на языке программирования Си Яном Колле (Yann Collet) и распространяется на условиях лицензии BSD. Существуют портированные версии и интерфейсы для множества языков, в том числе Java, C#, Python и т. д. Некоторые базы данных, например Hadoop , используют LZ4 благодаря его высокой скорости сжатия. LZ4 также реализован в составе ядра Linux начиная с версии 3.11 , может применяться для ускорения загрузки . Файловая система ZFS в составе реализаций FreeBSD, Illumos, « » и ZFS-OSX поддерживает метод LZ4 для сжатия данных . Ядро Linux поддерживает LZ4 для сжатых образов ФС SquashFS начиная с версии 3.19. LZ4 также реализован в составе архиватора Zstd Яна Колле.

Примечания

  1. . . Phoronix (28 января 2013). Дата обращения: 28 августа 2015. 24 сентября 2015 года.
  2. Yann Collet. (26 мая 2011). Дата обращения: 28 августа 2015. 23 сентября 2015 года.
  3. ticki. (25 октября 2016). Дата обращения: 29 июня 2017. Архивировано из 27 июня 2017 года.
  4. . Дата обращения: 17 октября 2018. Архивировано из 27 сентября 2018 года.
  5. . Дата обращения: 17 октября 2018. 17 октября 2018 года.
  6. . Дата обращения: 17 октября 2018. Архивировано из 27 сентября 2018 года.
  7. на сайте GitHub
  8. Jonathan Corbet. . LWN.net (19 июля 2013). Дата обращения: 28 августа 2015. 15 декабря 2017 года.
  9. . Дата обращения: 17 октября 2018. 17 октября 2018 года.
  10. . FreeBSD (13 ноября 2013). Дата обращения: 28 августа 2015. 12 ноября 2020 года.
  11. . illumos . Дата обращения: 28 августа 2015. Архивировано из 9 октября 2018 года.
  12. на сайте GitHub
  13. . . Дата обращения: 28 августа 2015. 25 апреля 2020 года.
  14. Phillip Lougher. (27 ноября 2014). Дата обращения: 28 августа 2015.

Ссылки

  • (англ.) — официальный сайт LZ4
  • / Matt Mahoney (англ.)
  • / University of Lincoln-Nebraska
Источник —

Same as LZ4