LZ4 (алгоритм сжатия) - LZ4 (compression algorithm)
Оригинальный автор (ы) | Ян Колле |
---|---|
Разработчики) | Ян Колле |
изначальный выпуск | 24 апреля 2011 г. |
Стабильный выпуск | 1.9.2 / 20 августа 2019 г.[1] |
Репозиторий | |
Написано в | C |
Операционная система | Кроссплатформенность |
Платформа | Портативный |
Тип | Сжатие данных |
Лицензия | Упрощенная лицензия BSD |
Интернет сайт | lz4 |
Магическое число | 04 22 4д 18[2] |
---|---|
Тип формата | Сжатие данных |
Интернет сайт | https://github.com/lz4/lz4/blob/master/doc/lz4_Frame_format.md |
LZ4 это сжатие данных без потерь алгоритм ориентированный на скорость сжатия и декомпрессии. Он принадлежит к LZ77 семейство схем побайтового сжатия.
Функции
Алгоритм дает немного худшую степень сжатия, чем LZO алгоритм, который, в свою очередь, хуже, чем такие алгоритмы, как ВЫПУСКАТЬ. Однако скорости сжатия аналогичны LZO и в несколько раз быстрее, чем DEFLATE, в то время как скорости декомпрессии могут быть значительно выше, чем LZO.[3]
Дизайн
LZ4 использует только этап сопоставления словаря (LZ77) и, в отличие от других распространенных алгоритмов сжатия, не объединяет его с энтропийное кодирование этап (например, Кодирование Хаффмана в DEFLATE).[4][5]
Алгоритм LZ4 представляет данные как серию последовательностей. Каждая последовательность начинается с однобайтового токена, разбитого на два 4-битных поля. Первое поле представляет количество литеральных байтов, которые должны быть скопированы в вывод. Второе поле представляет количество байтов для копирования из уже декодированного выходного буфера (0 представляет минимальную длину совпадения в 4 байта). Значение 15 в любом из битовых полей указывает, что длина больше, и есть дополнительный байт данных, который должен быть добавлен к длине. Значение 255 в этих дополнительных байтах указывает, что нужно добавить еще один байт. Следовательно, произвольная длина представлена серией дополнительных байтов, содержащих значение 255. Строка литералов идет после токена и любых дополнительных байтов, необходимых для указания длины строки. За этим следует смещение, указывающее, как далеко в выходном буфере следует начать копирование. Дополнительные байты (если есть) длины совпадения прибывают в конец последовательности.[6][7]
Сжатие может осуществляться потоком или блоками. Более высокая степень сжатия может быть достигнута, если приложить больше усилий для поиска наилучшего соответствия. Это приводит как к меньшему результату, так и к более быстрой декомпрессии.
Выполнение
Эталонная реализация на языке C Яна Колле находится под лицензией BSD. Есть порты и привязки на разных языках, таких как Java, C #, Python и т. Д.[8] Базы данных вроде Hadoop используйте этот алгоритм для быстрого сжатия. LZ4 также изначально был реализован в Ядро Linux 3.11.[9] FreeBSD, Illumos, ZFS в Linux и ZFS-OSX реализации файловой системы ZFS поддерживают алгоритм LZ4 для сжатия на лету.[10][11][12][13] Linux поддерживает LZ4 для Сквош Поскольку 3.19-rc1.[14] LZ4 также реализован в более новых Zstd архиватор Ян Колле.
Рекомендации
- ^ «LZ4 v1.9.2». Github. 30 августа 2019 г.. Получено 30 августа 2019.
- ^ Колле, Янн. "Описание формата кадра LZ4". Получено 7 октября 2020.
- ^ Майкл Ларабель (2013-01-28). «Поддержка сжатия ядра Linux с помощью LZ4». Фороникс. Получено 2015-08-28.
- ^ Колле, Янн (30 марта 2019). "Описание формата блока LZ4". GitHub. Получено 2020-07-09.
Нет ни серверной части энтропийного кодировщика, ни уровня кадрирования.
- ^ DEFLATE Спецификация формата сжатых данных версии 1.3. IETF. Дои:10.17487 / RFC1951. RFC 1951. Получено 2020-07-09.
- ^ Ян Колле (26 мая 2011 г.). «Сжатие данных в реальном времени». Получено 2015-08-28.
- ^ тики (2016-10-25). «Как работает LZ4». Получено 2017-06-29.
- ^ Алгоритм чрезвычайно быстрого сжатия http://www.lz4.org на GitHub
- ^ Джонатан Корбет (19.07.2013). «Развитие ядра». LWN.net. Получено 2015-08-28.
- ^ «Примечания к выпуску FreeBSD 9.2-RELEASE». FreeBSD. 2013-11-13. Получено 2015-08-28.
- ^ «Сжатие LZ4». иллюзия. Получено 2015-08-28.
- ^ Illumos # 3035 Поддержка сжатия LZ4 в ZFS и GRUB на GitHub
- ^ «Особенности: сжатие lz4». OpenZFS. Получено 2015-08-28.
- ^ Филипп Лугер (27.11.2014). "Squashfs: Добавить параметр конфигурации сжатия LZ4". Получено 2015-08-28.