Автор (ы) оригинала | Ян Колле |
---|---|
Разработчики) | Ян Колле |
изначальный выпуск | 24 апреля 2011 г. |
Стабильный выпуск | 1.9.3 / 16 ноября 2020 г . [1] |
Репозиторий | |
Написано в | C |
Операционная система | Кроссплатформенность |
Платформа | Портативный |
Тип | Сжатие данных |
Лицензия | Упрощенная лицензия BSD |
Интернет сайт | lz4 |
Магическое число | 04 22 4д 18 [2] |
---|---|
Тип формата | Сжатие данных |
Интернет сайт | https://github.com/lz4/lz4/blob/master/doc/lz4_Frame_format.md |
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.
Ссылки [ править ]
- ^ "Последний выпуск LZ4" . Github . Проверено 15 января 2021 года .
- ^ Колле, Янн. «Описание формата кадра LZ4» . Дата обращения 7 октября 2020 .
- ^ Майкл Ларабел (28 января 2013). «Поддержка сжатия ядра Linux с помощью LZ4» . Фороникс . Проверено 28 августа 2015 года .
- ↑ Колле, Янн (30 марта 2019 г.). «Описание формата блока LZ4» . GitHub . Проверено 9 июля 2020 .
Нет ни серверной части энтропийного кодировщика, ни уровня кадрирования.
- ^ DEFLATE Спецификация формата сжатых данных версии 1.3 . IETF . DOI : 10,17487 / RFC1951 . RFC 1951 . Проверено 9 июля 2020 .
- ↑ Ян Колле (26 мая 2011 г.). «Сжатие данных в реальном времени» . Проверено 28 августа 2015 года .
- ^ Ticki (25 октября 2016 г.). «Как работает LZ4» . Проверено 29 июня 2017 года .
- ^ Алгоритм чрезвычайно быстрого сжатия http://www.lz4.org на GitHub
- ↑ Джонатан Корбет (19 июля 2013 г.). «Развитие ядра» . LWN.net . Проверено 28 августа 2015 года .
- ^ "Примечания к выпуску FreeBSD 9.2-RELEASE" . FreeBSD . 13 ноября 2013 . Проверено 28 августа 2015 года .
- ^ "Сжатие LZ4" . иллюмос . Проверено 28 августа 2015 года .
- ^ Illumos # 3035 Поддержка сжатия LZ4 в ZFS и GRUB на GitHub
- ^ "Особенности: сжатие lz4" . OpenZFS . Проверено 28 августа 2015 года .
- ^ Phillip Lougher (27 ноября 2014). «Squashfs: Добавить параметр конфигурации сжатия LZ4» . Проверено 28 августа 2015 года .
Внешние ссылки [ править ]
- Официальный веб-сайт