Открыть сервис

Сжатие данных ZLIB

Сжатие данных ZLIB — это формат сжатия данных без потерь, основанный на алгоритме DEFLATE, и одноимённая программная библиотека, реализующая этот формат. ZLIB предоставляет универсальный, компактный и широко распространённый метод упаковки данных, который используется в самых разных областях — от хранения файлов до передачи данных по сети. Формат определён в RFC 1950, а базовая реализация на языке C была написана Жаном-Лу Гайи и Марком Адлером.

История

Разработка ZLIB началась в начале 1990-х годов как ответ на патентные ограничения, связанные с популярным в то время алгоритмом сжатия LZW, который использовался в форматах GIF и CompuServe. Жан-Лу Гайи и Марк Адлер, работавшие в то время в компании Info-ZIP, поставили перед собой цель создать свободную, высокопроизводительную и не обременённую патентами библиотеку сжатия.

Первая публичная версия ZLIB (версия 0.5) была выпущена 1 мая 1995 года. Ключевым решением стало использование в качестве основы алгоритма DEFLATE, который был разработан Филом Кацем для программы PKZIP и не был запатентован. В отличие от LZW, DEFLATE сочетал в себе два метода: кодирование повторяющихся последовательностей (алгоритм LZ77) и кодирование Хаффмана. Библиотека быстро завоевала популярность благодаря своей эффективности, надёжности и свободной лицензии (zlib License), которая разрешает использование как в свободных, так и в проприетарных проектах.

К середине 1990-х годов ZLIB стала стандартом де-факто для сжатия данных в Unix-подобных системах. Она была включена в состав многих дистрибутивов Linux и стала основой для таких утилит, как gzip. В 1996 году формат ZLIB был официально закреплён в RFC 1950, а алгоритм DEFLATE — в RFC 1951.

Формат ZLIB

Формат ZLIB представляет собой контейнер, который оборачивает сжатые данные, полученные с помощью алгоритма DEFLATE. Структура потока ZLIB включает в себя три основные части:

  1. Заголовок (2 байта): Содержит информацию о методе сжатия (всегда DEFLATE), уровне сжатия, а также флаг (FCHECK) для проверки целостности самого заголовка. Заголовок также может указывать на наличие словаря (специальной таблицы начальных данных) и размер окна сжатия.
  2. Сжатые данные (переменной длины): Непосредственно данные, сжатые алгоритмом DEFLATE. Они могут быть представлены в виде одного или нескольких блоков DEFLATE.
  3. Контрольная сумма (4 байта): В конце потока добавляется контрольная сумма, вычисленная по алгоритму Adler-32. Она служит для проверки целостности распакованных данных. Adler-32 менее надёжен, чем CRC-32, но значительно быстрее вычисляется.

Отличительной особенностью формата ZLIB является его компактность — заголовок занимает всего 2 байта, что делает его пригодным для передачи даже в коротких сообщениях.

Библиотека ZLIB

Программная библиотека ZLIB, написанная на языке C, является эталонной реализацией формата. Она предоставляет набор функций для сжатия и распаковки данных в памяти и в потоках. Ключевые характеристики библиотеки:

Библиотека ZLIB распространяется под свободной лицензией zlib License, которая разрешает использование, модификацию и распространение как в исходных, так и в бинарных кодах, при условии сохранения уведомления об авторских правах.

Применение

ZLIB и её реализация нашли широчайшее применение в современном программном обеспечении. Наиболее известные области использования:

Критика и альтернативы

Несмотря на широкую распространённость, ZLIB не лишена недостатков. Основные претензии связаны с относительно низкой степенью сжатия по сравнению с современными алгоритмами, такими как LZMA (используется в 7z) или Brotli. Алгоритм DEFLATE, лежащий в основе ZLIB, был разработан в 1990-х годах и не использует более сложные методы, такие как контекстное моделирование или преобразование Барроуза — Уилера.

Кроме того, ZLIB не поддерживает многопоточное сжатие, что ограничивает её производительность на многоядерных процессорах. Для решения этой проблемы были созданы форки, такие как zlib-ng (zlib next generation), которые оптимизированы для современных архитектур и поддерживают многопоточность.

Альтернативами ZLIB являются:

Интересные факты

Источники

  1. RFC 1950 — ZLIB Compressed Data Format Specification version 3.3.
  2. RFC 1951 — DEFLATE Compressed Data Format Specification version 1.3.
  3. Официальный сайт библиотеки zlib: https://www.zlib.net/
  4. Deutsch, P., & Gailly, J.-L. (1996). ZLIB Compressed Data Format Specification. RFC 1950.
  5. Gailly, J.-L., & Adler, M. (1995). zlib 0.5 Release Notes.
  6. Salomon, D. (2007). Data Compression: The Complete Reference (4th ed.). Springer.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →