ДЕФЛАТ Расшифровка - PullRequest
       27

ДЕФЛАТ Расшифровка

2 голосов
/ 25 января 2012

В настоящее время я читаю о методе DEFLATE для кодирования / декодирования данных.Я понимаю, что процесс состоит из двух частей:

i.Заменить дублирующую информацию (в указанном окне) ссылкой на предыдущий идентичный фрагмент.

ii.Используйте кодирование Хаффмана, чтобы уменьшить размер наиболее часто встречающихся символов.

У меня есть вопрос в отношении (i).DEFLATE использует LZ77, который, основываясь на окне размера, просматривает информацию и, если находит какую-либо дублирующую информацию, заменяет ее «указателем».Это имеет смысл.

Однако при декодировании с использованием LZ77 как DEFLATE распознает указатель?(Указатели - это пары длина-расстояние; как вы можете различить, если это указатель или просто число, присутствующее в исходных данных?)

Ссылка: http://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination

1 Ответ

4 голосов
/ 25 января 2012

Рекомендуется прочитать более точную спецификацию Deflate RFC 1951 и ответить на такие вопросы.

Что вы увидите в => 3.2.5. Сжатые блоки (коды длины и расстояния)

"буквенные и длинные алфавиты объединены в один алфавит"

, что означает, что, просто извлекая следующий символ, вы сразу узнаете, является ли он литералом (0..255), или длиной совпадения (257..285), или даже концом блока (256). В случае совпадения длины, ссылка (смещение) также должна быть декодирована. Смещения кодируются с использованием отдельного дерева.

...