Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Особенности [ править ]

Алгоритм дает немного худшую степень сжатия, чем алгоритм LZO , что, в свою очередь, хуже, чем такие алгоритмы, как DEFLATE . Однако скорости сжатия аналогичны LZO и в несколько раз быстрее, чем DEFLATE, в то время как скорости декомпрессии могут быть значительно выше, чем LZO. [3]

Дизайн [ править ]

LZ4 использует только этап сопоставления словаря (LZ77) и, в отличие от других распространенных алгоритмов сжатия, не объединяет его с этапом энтропийного кодирования (например, кодирование Хаффмана в DEFLATE). [4] [5]

Алгоритм LZ4 представляет данные как серию последовательностей. Каждая последовательность начинается с однобайтового токена, разбитого на два 4-битных поля. Первое поле представляет количество литеральных байтов, которые должны быть скопированы в вывод. Второе поле представляет количество байтов для копирования из уже декодированного выходного буфера (0 представляет минимальную длину совпадения в 4 байта). Значение 15 в любом из битовых полей указывает, что длина больше и есть дополнительный байт данных, который должен быть добавлен к длине. Значение 255 в этих дополнительных байтах указывает, что нужно добавить еще один байт. Следовательно, произвольная длина представлена ​​серией дополнительных байтов, содержащих значение 255. Строка литералов идет после токена и любых дополнительных байтов, необходимых для указания длины строки. За этим следует смещение, указывающее, как далеко в выходном буфере следует начать копирование. Дополнительные байты (если есть) длины совпадения прибывают в конец последовательности.[6] [7]

Сжатие может выполняться потоком или блоками. Более высокая степень сжатия может быть достигнута, если приложить больше усилий для поиска наилучших совпадений. Это приводит как к меньшему выходу, так и к более быстрой декомпрессии.

Реализация [ править ]

Эталонная реализация на языке C Яна Колле находится под лицензией BSD. Есть порты и привязки на разных языках, включая Java , C # и Python . [8] Система Apache Hadoop использует этот алгоритм для быстрого сжатия. LZ4 также изначально был реализован в ядре Linux 3.11. [9] Реализации файловой системы ZFS FreeBSD, Illumos, ZFS в Linux и ZFS-OSX поддерживают алгоритм LZ4 для сжатия на лету. [10] [11] [12] [13] Linux поддерживает LZ4 для SquashFS, начиная с версии 3.19-rc1. [14]LZ4 также реализован в новом архиваторе Zstd Янном Колле.

  • LZ4 доступен в расширенной версии 7zip: 7-zip-zstd
  • Lizard (предыдущий LZ5) - это улучшенная реализация LZ4 с очень быстрой декомпрессией более 1000 МБ в секунду, а также доступный в 7-zip-zstd.

Ссылки [ править ]

  1. ^ "Последний выпуск LZ4" . Github . Проверено 15 января 2021 года .
  2. ^ Колле, Янн. «Описание формата кадра LZ4» . Дата обращения 7 октября 2020 .
  3. ^ Майкл Ларабел (28 января 2013). «Поддержка сжатия ядра Linux с помощью LZ4» . Фороникс . Проверено 28 августа 2015 года .
  4. Колле, Янн (30 марта 2019 г.). «Описание формата блока LZ4» . GitHub . Проверено 9 июля 2020 . Нет ни серверной части энтропийного кодировщика, ни уровня кадрирования.
  5. ^ DEFLATE Спецификация формата сжатых данных версии 1.3 . IETF . DOI : 10,17487 / RFC1951 . RFC 1951 . Проверено 9 июля 2020 .
  6. Ян Колле (26 мая 2011 г.). «Сжатие данных в реальном времени» . Проверено 28 августа 2015 года .
  7. ^ Ticki (25 октября 2016 г.). «Как работает LZ4» . Проверено 29 июня 2017 года .
  8. ^ Алгоритм чрезвычайно быстрого сжатия http://www.lz4.org на GitHub
  9. Джонатан Корбет (19 июля 2013 г.). «Развитие ядра» . LWN.net . Проверено 28 августа 2015 года .
  10. ^ "Примечания к выпуску FreeBSD 9.2-RELEASE" . FreeBSD . 13 ноября 2013 . Проверено 28 августа 2015 года .
  11. ^ "Сжатие LZ4" . иллюмос . Проверено 28 августа 2015 года .
  12. ^ Illumos # 3035 Поддержка сжатия LZ4 в ZFS и GRUB на GitHub
  13. ^ "Особенности: сжатие lz4" . OpenZFS . Проверено 28 августа 2015 года .
  14. ^ Phillip Lougher (27 ноября 2014). «Squashfs: Добавить параметр конфигурации сжатия LZ4» . Проверено 28 августа 2015 года .

Внешние ссылки [ править ]

  • Официальный веб-сайт