LZ4 (алгоритм сжатия)
Оригинальный автор(ы) | Янн Колле |
---|---|
Разработчик(и) | Янн Колле |
Первоначальный выпуск | 24 апреля 2011 г. |
Стабильная версия | 1.9.4 [1] ![]() |
Репозиторий | |
Написано в | С |
Операционная система | Кросс-платформенный |
Платформа | Портативный |
Тип | Сжатие данных |
Лицензия | Упрощенная лицензия BSD |
Веб-сайт | лз4 |
Магическое число | 04 22 4d 18 [2] |
---|---|
Тип формата | Сжатие данных |
Веб-сайт | https://github.com/lz4/lz4/blob/master/doc/lz4_Frame_format.md |
LZ4 — это сжатия данных без потерь алгоритм , ориентированный на скорость сжатия и распаковки. Он принадлежит к LZ77 семейству схем байт-ориентированного сжатия .
Особенности [ править ]
Алгоритмы LZ4 призваны обеспечить хороший компромисс между скоростью и степенью сжатия. Обычно он имеет меньшую (то есть худшую) степень сжатия, чем аналогичный алгоритм LZO , который, в свою очередь, хуже, чем такие алгоритмы, как DEFLATE . Однако скорость сжатия LZ4 аналогична LZO и в несколько раз выше, чем DEFLATE, а скорость распаковки значительно выше, чем LZO. [3]
Дизайн [ править ]
LZ4 использует только этап сопоставления словаря (LZ77) и, в отличие от других распространенных алгоритмов сжатия, не объединяет его с этапом энтропийного кодирования (например, кодирование Хаффмана в DEFLATE). [4] [5]
Алгоритм LZ4 представляет данные как серию последовательностей. Каждая последовательность начинается с однобайтового токена, который разбит на два 4-битных поля. Первое поле представляет количество литеральных байтов, которые должны быть скопированы на выход. Второе поле представляет количество байтов, которые нужно скопировать из уже декодированного выходного буфера (где 0 соответствует минимальной длине совпадения в 4 байта). Значение 15 в любом из битовых полей указывает, что длина больше и к длине необходимо добавить дополнительный байт данных. Значение 255 в этих дополнительных байтах указывает на то, что необходимо добавить еще один байт. Следовательно, произвольная длина представлена серией дополнительных байтов, содержащих значение 255. Строка литералов идет после токена и любых дополнительных байтов, необходимых для указания длины строки. За ним следует смещение, указывающее, как далеко в выходном буфере следует начать копирование. Дополнительные байты (если таковые имеются) длины соответствия располагаются в конце последовательности. [6] [7]
Сжатие может осуществляться потоком или блоками. Более высоких степеней сжатия можно достичь, приложив больше усилий для поиска наилучшего соответствия. Это приводит как к меньшему выходу, так и к более быстрой декомпрессии.
Реализация [ править ]
Эталонная реализация на языке C, созданная Яном Колле, лицензируется по лицензии BSD. Существуют порты и привязки на различных языках, включая Java , C# , Rust и 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. [15]
Ссылки [ править ]
- ^ «Релиз v1.9.4» .
- ^ Колле, Янн. «Описание формата кадра LZ4» . Гитхаб . Проверено 7 октября 2020 г.
- ^ Майкл Ларабель (28 января 2013 г.). «Поддержка сжатия ядра Linux с помощью LZ4» . Фороникс . Проверено 28 августа 2015 г.
- ^ Колле, Янн (30 марта 2019 г.). «Описание формата блока LZ4» . Гитхаб . Проверено 9 июля 2020 г.
Нет ни серверной части энтропийного кодировщика, ни уровня кадрирования.
- ^ DEFLATE Спецификация формата сжатых данных, версия 1.3 . IETF . дои : 10.17487/RFC1951 . РФК 1951 . Проверено 9 июля 2020 г.
- ^ Ян Колле (26 мая 2011 г.). «Сжатие данных в реальном времени» . Проверено 28 августа 2015 г.
- ^ Тики (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» . иллюзии . Архивировано из оригинала 9 октября 2018 года . Проверено 28 августа 2015 г.
- ^ Поддержка сжатия Illumos #3035 LZ4 в ZFS и GRUB на GitHub.
- ^ «Особенности: сжатие lz4» . ОпенЗФС . Проверено 28 августа 2015 г.
- ^ Филип Логер (27 ноября 2014 г.). «Squashfs: добавлена опция конфигурации сжатия LZ4» . Проверено 28 августа 2015 г.
- ^ 7-zip-zstd