zlib
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2021 г. ) |
![]() | |
Первоначальный выпуск | 1 мая 1995 г. |
---|---|
Стабильная версия | 1.3.1 [1] / 22 января 2024 г |
Репозиторий | |
Написано в | С |
Операционная система | Кросс-платформенный |
Тип | Сжатие данных |
Лицензия | Лицензия zlib |
Веб-сайт | zlib |
zlib ( / ˈ z iː l ɪ b / или " zeta -lib", / ˈ z iː t ə ˌ l ɪ b / ) [2] [3] — это программная библиотека, используемая для сжатия данных , а также формат данных. [4] zlib был написан Жаном-Лу Гайи и Марком Адлером и представляет собой абстракцию алгоритма сжатия DEFLATE, используемого в их программе сжатия файлов gzip . zlib также является важным компонентом многих программных платформ, включая Linux , macOS и iOS . Он также использовался в игровых консолях, таких как PlayStation 4 , PlayStation 3 , Wii U , Wii , Xbox One и Xbox 360 .
Первая общедоступная версия Zlib, 0.9, была выпущена 1 мая 1995 года и изначально предназначалась для использования с библиотекой изображений libpng . Это бесплатное программное обеспечение , распространяемое по лицензии zlib .
Возможности
[ редактировать ]Инкапсуляция
[ редактировать ]Необработанные сжатые данные DEFLATE (RFC 1951) [5] обычно записываются с помощью оболочки zlib или gzip, инкапсулирующей данные путем добавления верхнего и нижнего колонтитула. Это обеспечивает идентификацию потока и обнаружение ошибок, которые не предоставляются необработанными данными DEFLATE.
Оболочка zlib (RFC 1950) [4] меньше, чем оболочка gzip (RFC 1952), [6] поскольку последний хранит имя файла и другую информацию о файловой системе.
Алгоритм
[ редактировать ]По состоянию на сентябрь 2018 г. [update], zlib поддерживает только один алгоритм, называемый DEFLATE , который использует комбинацию варианта LZ77 (Lempel-Ziv 1977) и кодирования Хаффмана . [7] Этот алгоритм обеспечивает хорошее сжатие самых разных данных при минимальном использовании системных ресурсов. Этот же алгоритм используется и в формате Zip-архива . В заголовке учитываются другие алгоритмы, но ни один из них в настоящее время не реализован.
Использование ресурсов
[ редактировать ]zlib предоставляет средства для контроля использования процессора и памяти. Может быть предоставлено значение уровня сжатия, которое меняет скорость на сжатие. Существуют также средства для экономии памяти, полезные в средах с ограниченным объемом памяти, например в некоторых встроенных системах.
Стратегия
[ редактировать ]Сжатие можно оптимизировать для конкретных типов данных. Если вы используете библиотеку для всегда сжатия определенных типов данных, то использование определенной стратегии может улучшить сжатие и производительность. Например, если данные содержат длинные повторяющиеся байты, стратегия кодирования длин серий (RLE) может дать хорошие результаты на более высокой скорости. Для общих данных предпочтительна стратегия по умолчанию.
Обработка ошибок
[ редактировать ]Ошибки в сжатых данных могут быть обнаружены и пропущены. Кроме того, если в сжатый поток записываются точки «полной очистки», то поврежденные данные можно пропустить, и распаковка будет повторно синхронизирована в следующей точке очистки, хотя восстановление поврежденных данных при ошибках не предусмотрено. Точки полной очистки полезны для больших потоков данных по ненадежным каналам, где некоторая потеря данных не имеет значения, например, в некоторых мультимедийных приложениях. Однако создание множества точек смыва может повлиять как на скорость, так и на степень (коэффициент) сжатия.
Длина данных
[ редактировать ]Нет ограничений на длину данных, которые можно сжимать или распаковывать. Повторные вызовы библиотеки позволяют обрабатывать неограниченное количество блоков данных. Некоторый вспомогательный код (счетчики) может страдать от переполнения при длинных потоках данных, но это не влияет на фактическое сжатие или распаковку.
При сжатии длинного (или бесконечного) потока данных желательно записывать регулярные точки полной очистки.
Приложения
[ редактировать ]Сегодня zlib является чем-то вроде де-факто стандарта до такой степени, что zlib и DEFLATE часто используются как взаимозаменяемые в документах стандартов, причем тысячи приложений используют его для сжатия, прямо или косвенно. [8] К ним относятся:
- Ядро Linux , где zlib используется для реализации сжатых сетевых протоколов, сжатых файловых систем и для распаковки образа ядра во время загрузки.
- GNU Binutils и отладчик GNU (GDB)
- libpng — эталонная реализация формата изображений PNG , которая определяет DEFLATE в качестве сжатия потока для растровых данных.
- libwww , API для веб-приложений, таких как веб-браузеры .
- , HTTP-сервер Apache который использует zlib для реализации HTTP/1.1 .
- Аналогично, библиотека cURL использует zlib для распаковки ответов HTTP. [9]
- Клиент и сервер OpenSSH , использующие zlib для выполнения дополнительного сжатия, предлагаемого протоколом Secure Shell .
- Библиотеки безопасности OpenSSL и GnuTLS , которые могут дополнительно использовать zlib для сжатия TLS- соединений.
- , Мультимедийная библиотека FFmpeg использующая zlib для чтения и записи сжатых DEFLATE частей потоковых форматов , таких как Matroska .
- Синхронизатор удаленных файлов rsync , который использует zlib для реализации дополнительного сжатия протокола.
- Менеджеры dpkg и RPM пакетов , которые используют zlib для распаковки файлов из сжатых пакетов программного обеспечения.
- Системы Apache Subversion и CVS контроля версий , которые используют zlib для сжатия трафика в и из удаленных репозиториев.
- Столбцово-ориентированный формат хранения данных Apache ORC использует ZLib в качестве метода сжатия по умолчанию. [10]
- Система Git контроля версий использует zlib для хранения содержимого своих объектов данных (блобов, деревьев, коммитов и тегов).
- СУБД PostgreSQL . использует zlib со специальным форматом дампа (pg_dump -Fc) для резервного копирования базы данных
- Класс System.IO.Compression.DeflateStream Microsoft .NET Framework 2.0 и более поздних версий. [11]
- Утилита «deflate» в TORNADO как часть операционной системы VxWorks, созданная Wind River Systems, использует zlib для сжатия образов загрузочных ПЗУ.
- поверхность zlib, [12] программа сжатия raw zlib, часть qpdf [13]
- СУБД MySQL . использует ZLib LZ77 для сжатия InnoDB таблиц [14]
zlib также используется во многих встроенных устройствах, таких как Apple iPhone и Sony PlayStation 3 , поскольку код является переносимым, свободно лицензируется и занимает относительно небольшой объем памяти.
Вилки
[ редактировать ]Часто используемая библиотека, построенная на старой кодовой базе, zlib также часто разветвляется третьими сторонами, которые заявляют об улучшениях этой библиотеки:
- У Intel есть высокопроизводительная версия zlib. [15]
- Cloudflare поддерживает высокопроизводительную версию с «огромными» улучшениями. [16]
- zlib-ng — это альтернативная версия zlib для систем «следующего поколения». Он удаляет обходной код для компиляторов, которые не поддерживают ANSI C , интегрирует оптимизации Cloudflare и Intel, добавляет аппаратное ускорение ( SIMD и встроенные функции ), а также использует дезинфицирующие средства кода , фаззинг и покрытие кода , чтобы помочь найти ошибки. [17]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Адлер, Марк (22 января 2024 г.). «[Zlib-announce] выпущена zlib 1.3.1» . Проверено 23 января 2024 г.
- ^ Штутц, Майкл (22 октября 2004 г.). «Поваренная книга Linux», 2-е издание: советы и методы для повседневного использования . Нет крахмального пресса. ISBN 9781593270315 . Архивировано из оригинала 25 января 2023 года . Проверено 28 октября 2021 г. - через Google Книги.
- ^ Программное обеспечение Локи; Холл, Джон Р. (22 октября 2001 г.). Программирование игр для Linux . Нет крахмального пресса. ISBN 9781886411494 . Архивировано из оригинала 11 июля 2024 года . Проверено 28 октября 2021 г. - через Google Книги.
- ^ Jump up to: Перейти обратно: а б РФК 1950 . дои : 10.17487/RFC1950 .
- ^ РФК 1951 . дои : 10.17487/RFC1951 .
- ^ РФК 1952 . дои : 10.17487/RFC1952 .
- ^ РФК 1951 . дои : 10.17487/RFC1951 .
- ^ Гайи, Жан-Лу; Адлер, Марк (18 апреля 2002 г.), zlib Applications , заархивировано из оригинала 10 июня 2019 г. , получено 9 декабря 2007 г.
- ^ «С++ — Почему cURL использует zlib?» . Переполнение стека .
- ^ «ORCFile в HDP 2: лучшее сжатие, лучшая производительность» . 6 сентября 2013 года. Архивировано из оригинала 6 августа 2020 года . Проверено 16 мая 2020 г.
- ^ System.IO.Compression.DeflateStream. Архивировано 6 февраля 2016 г. на Wayback Machine . Библиотека MSDN.
- ^ Debian по основным командам Руководство –
- ^ "qpdf" . Архивировано из оригинала 11 июля 2024 г. Проверено 28 марта 2021 г.
- ^ «MySQL :: Справочное руководство MySQL 8.0 :: 15.9.1.5 Как работает сжатие таблиц InnoDB» . dev.mysql.com . Архивировано из оригинала 01 августа 2021 г. Проверено 14 июля 2021 г.
- ^ «GitHub Intel ZLIB» . гитхаб . 25 января 2024 года. Архивировано из оригинала 25 января 2024 года . Проверено 25 января 2024 г.
- ^ «Борьба с раком: неожиданная польза от открытого исходного кода нашего кода» . Блог Cloudflare . 8 июля 2015 г. Архивировано из оригинала 21 сентября 2019 г. Проверено 18 января 2020 г.
- ^ Росбах, Гонконг (24 февраля 2023 г.). «zlib-ng/zlib-ng: замена zlib с оптимизацией для систем «следующего поколения» . Гитхаб . zlib-ng. Архивировано из оригинала 20 апреля 2020 года . Проверено 18 января 2020 г.