Формат Deflate: различия между типами блоков - PullRequest
0 голосов
/ 11 ноября 2018

В настоящее время я пытаюсь написать компрессор и декомпрессор с той же целью, что и спецификация RFC Deflate.

Я не могу понять разницу между тем, как блоки составляются при сжатии с фиксированными и динамическими таблицами. Файл обрабатывается LZ77, генерируя (distance, length) + literal.

  • Как узнать тип блока?
  • Должен ли я сжимать эти данные?
  • Учитывая, что я использую фиксированное сжатие и мне не нужно отправлять таблицы, как кодировщик узнает, как кодировать данные?
  • Кроме того, нужно ли отправлять данные до того, как будет выполнено фактическое сжатие?

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

Я сейчас читаю Сжатие данных: Полная справка . Любой совет будет полезен.

1 Ответ

0 голосов
/ 11 ноября 2018

Так как вы пытаетесь сжать, вы должны выбрать меньшее из двух. Функция deflate в zlib вычисляет размер фиксированного блока, динамического блока и сохраненного блока и выдает наименьшее из трех значений.

Если вы кодируете фиксированный блок, вы кодируете, используя фиксированный код для литералов / длин и расстояний. Этот код предоставляется в RFC.

...