Введение

Библиотека кодека DEFLATE

zlib (/'//z//i://l//I//b/ или "zeta lib", /'//z//i://t//@//,//l//I//b/) — это программная библиотека, используемая для сжатия данных, а также формат данных. Файлы обычно записываются с использованием обертки zlib или gzip, которая заключает в себе данные, добавляя заголовок и нижний колонтитул. Это обеспечивает идентификацию потока и обнаружение ошибок, которые не предоставляются необработанными данными DEFLATE. Обертка zlib (RFC 1950) меньше, чем обертка gzip (RFC 1952), поскольку последняя хранит имя файла и другую информацию о файловой системе.

Алгоритм

По состоянию на 2018 год, zlib поддерживает только один алгоритм, называемый DEFLATE, который использует комбинацию модификации LZ77 (Lempel–Ziv 1977) и кодирования Хаффмана. Этот алгоритм обеспечивает хорошее сжатие широкого спектра данных при минимальном использовании системных ресурсов. Он также используется в формате архивов Zip. Заголовок предусматривает возможность использования других алгоритмов, но в настоящее время ни один из них не реализован.

Использование ресурсов

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

Стратегия

Сжатие может быть оптимизировано для определенных типов данных. Если вы всегда используете библиотеку для сжатия конкретных типов данных, то применение специализированной стратегии может повысить эффективность сжатия и производительность. Например, если данные содержат длинные последовательности повторяющихся байтов, стратегия кодирования длин серий (RLE) может обеспечить хорошие результаты с более высокой скоростью. Для общих данных рекомендуется использовать стратегию по умолчанию.

Обработка ошибок

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

Длина данных

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