Interested Article - Deflate

Deflate — это алгоритм сжатия без потерь , использующий комбинацию алгоритмов LZ77 и Хаффмана . Изначально был описан Филом Кацем для второй версии его архиватора PKZIP , который впоследствии был определён в (1996 год).

Deflate считается свободным от всех существующих патентов, и пока оставался в силе патент на LZW (он применяется в формате GIF ), это привело к использованию Deflate не только в формате ZIP , для которого Кац изначально его спроектировал, но также в компрессоре/декомпрессоре gzip и в PNG -изображениях.

Формат потока данных

Deflate-поток содержит серии блоков. Перед каждым блоком находится трёхбитовый заголовок:

  • Один бит: флаг последнего блока.
  • 1: блок последний.
  • 0: блок не последний.
  • Два бита: метод, с помощью которого были закодированы данные.

Большая часть блоков кодируется с помощью метода 10 (динамический Хаффман), который предоставляет оптимизированное дерево кодов Хаффмана для каждого нового блока. Инструкции для создания дерева кодов Хаффмана следуют непосредственно за заголовком блока.

Компрессия выполняется в два этапа:

  • замена повторяющихся строк указателями (алгоритм LZ77);
  • замена символов новыми символами, основываясь на частоте их использования (алгоритм Хаффмана).

Ссылки

  • DEFLATE Compressed Data Format Specification version 1.3 (англ.)
  • Описание формата сжатия данных Deflate , Е. В. Михальчик
Источник —

Same as Deflate