2. Обзор сжатого представления
Сжатые данные состоят из последовательности блоков, соответствующих блокам входных данных. Размер блока данных произвольный, за исключением того, что несжатые блоки ограничины размером в 65,535 байт.
Каждый блок сжимается используя комбинацию алгоритма LZ77 и Huffman кодирования. Деревья Huffman для каждого блока не зависят от деревьев предыдущих или последующих блоков; алгоритм LZ77 может использовать ссылку на повторяющиеся строки в предыдущих блоках, до 32K входных байт ранее.
Каждый блок состоит из двух частей: пара Huffman деревьев, которые описывают представление сжатых данных, и сжатые данные. (Сами деревья Huffman сжимаются используя Huffman кодирование.) Сжатые данные состоят из последовательности элементов двух типов: дословные байты (literal bytes) (или строки, которые не были обнаружены в предыдущих 32K входных байтах), и указатели на повторяющиеся строки, где указатель представляет собой пару <длина,обратная дистанция> (<length, backward distance>). Формат "deflate" ограничивает смещение 32K байтами а длину 258 байтами, но не ограничивает размер блока, за исключением не сжатых блоков, ограничение на длину которых приведено выше.
Каждый тип значений (литеральные символы, расстояния и длины) в сжатых данных представлен, используя код Huffman, используя одно общее дерево кодирования для литеральных символов и длин и отдельное дерево кодирования для расстояния. Деревья кода для каждого блока записываются в компактной форме перед сжатыми данными этого блока.