Описание от Wikipedia:LZ4 алгоритм сжатия объяснение
Алгоритм LZ4 представляет данные в виде серии последовательностей. Каждая последовательность начинается с однобайтового токена, разбитого на два 4-битных поля. Первое поле представляет количество буквенных байтов, которые должны быть скопированы на выход. Второе поле представляет количество байтов для копирования из уже декодированного выходного буфера (с 0, представляющим минимальную длину соответствия 4 байта). Значение 15 в любом из битовых полей указывает, что длина больше и есть дополнительный байт данных, который должен быть добавлен к длине. Значение 255 в этих дополнительных байтах указывает, что еще один байт будет добавлен. Следовательно, произвольные длины представлены рядом дополнительных байтов, содержащих значение 255. После того, как в строке литералов появится токен и любые дополнительные байты, необходимые для указания длины строки. За этим следует смещение, указывающее, как далеко назад в выходном буфере начать копирование. Дополнительные байты (если они есть) длины совпадения поступают в конце последовательности
Я этого не понимал! У кого-нибудь есть простой способ понять пример? Например, в приведенном выше объяснении, что такое буквальный байт и что такое совпадение? Как мы можем иметь декодированный выходной буфер, когда мы только начинаем сжимать? Длина чего?
Объяснение в here было также непроницаемым для меня.
Простой пример будет приятным, если у вас нет лучшего способа объяснить это.
Например, рассмотрим строку unsigned chars: «hello eddy how are you». Как они сжались? – ade
Следующая ссылка предлагает очень хорошее объяснение формата сжатия LZ4 и того, как он работает: http://www.brutaldeluxe.fr/products/crossdevtools/lz4/index.html – Cyan
ОК, поэтому в каждом сжатом блоке может быть один литерал и многое другое? Это казалось бы логичным, так как последовательность байтов повторялась десятки раз. Это так? – ade