Как связаны между собой zlib, gzip и zip? Что у них общего и чем они отличаются?

Алгоритм сжатия, используемый в zlib, практически такой же, как в gzip и zip. Что такое gzip и zip? Чем они отличаются и как они одинаковы?

3 ответа

Решение

Краткая форма:

.zip это формат архива, использующий, как правило, метод сжатия Deflate. .gz Формат gzip для отдельных файлов, также с использованием метода сжатия Deflate. Часто gzip используется в сочетании с tar для создания формата сжатого архива, .tar.gz, Библиотека zlib предоставляет код сжатия и распаковки Deflate для использования zip, gzip, png (который использует оболочку zlib для данных deflate) и многими другими приложениями.

Длинная форма:

Формат ZIP был разработан Филом Кацем как открытый формат с открытой спецификацией, где его реализация, PKZIP, была условно-бесплатной. Это формат архива, в котором хранятся файлы и их структура каталогов, где каждый файл сжимается отдельно. Тип файла .zip, Файлы, а также структура каталогов могут быть зашифрованы.

Формат ZIP поддерживает несколько методов сжатия:

0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1

Методы с 1 по 7 являются историческими и не используются. Методы с 9 по 98 являются сравнительно недавними добавлениями, и их использование в небольших количествах по-разному. Единственный метод, широко распространенный в формате ZIP, - это метод 8, Deflate, и, в некоторой степени, метод 0, который вообще не является сжатием. Практически каждый .zip файл, с которым вы столкнетесь в дикой природе, будет использовать исключительно методы 8 и 0, вероятно, просто метод 8. (Метод 8 также имеет средства для эффективного хранения данных без сжатия и относительно небольшого расширения, а метод 0 не может быть потоковым, тогда как метод 8 можно.)

Стандарт ISO/IEC 21320-1:2015 для файловых контейнеров представляет собой ограниченный zip-формат, например используемый в архивных файлах Java (.jar), файлах Office Open XML (Microsoft Office .docx, .xlsx, .pptx), Office Document Файлы форматирования (.odt, .ods, .odp) и файлы EPUB (.epub). Этот стандарт ограничивает методы сжатия 0 и 8, а также другие ограничения, такие как отсутствие шифрования или подписей.

Приблизительно в 1990 году группа Info-ZIP написала переносимые, бесплатные, открытые реализации zip а также unzip утилиты, поддерживающие сжатие в формате Deflate, и распаковку этого и более ранних форматов. Это значительно расширило использование .zip формат.

В начале 90-х формат gzip был разработан как замена Unix compress утилита, полученная из кода Deflate в утилитах Info-ZIP. Юникс compress был разработан для сжатия одного файла или потока, добавляя .Z к имени файла. compress использует алгоритм сжатия LZW, который в то время находился под патентом, а его бесплатное использование оспаривалось владельцами патентов. Хотя некоторые конкретные реализации Deflate были запатентованы Филом Кацем, формат не был, и поэтому можно было написать реализацию Deflate, которая не нарушала бы никаких патентов. Эта реализация не была такой сложной в последние 20 лет. Unix gzip Утилита была предназначена в качестве замены для замены compress и на самом деле умеет распаковывать compress сжатые данные (при условии, что вы смогли разобрать это предложение). gzip добавляет .gz к имени файла. gzip использует сжатый формат данных Deflate, который сжимает немного лучше, чем Unix compress, имеет очень быструю распаковку и добавляет CRC-32 в качестве проверки целостности данных. Формат заголовка также позволяет хранить больше информации, чем compress допустимый формат, такой как исходное имя файла и время изменения файла.

Хоть compress сжимает только один файл, обычно tar утилита для создания архива файлов, их атрибутов и структуры каталогов в единый .tar файл, а затем сжать его compress сделать .tar.Z файл. На самом деле tar Утилита имела и все еще имеет возможность выполнять сжатие одновременно, вместо того, чтобы передавать данные tar в compress, Все это перенесено в формат gzip, и tar имеет возможность сжимать непосредственно в .tar.gz формат. tar.gz формат сжимает лучше, чем .zip подход, так как сжатие .tar может использовать избыточность в файлах, особенно в небольших файлах. .tar.gz является наиболее распространенным форматом архива, используемым в Unix, из-за его очень высокой переносимости, но также используются более эффективные методы сжатия, поэтому вы часто будете видеть .tar.bz2 а также .tar.xz архивы.

В отличие от .tar, .zip имеет центральный каталог в конце, который предоставляет список содержимого. Это и отдельное сжатие обеспечивает произвольный доступ к отдельным записям в .zip файл. .tar файл должен быть распакован и отсканирован от начала до конца, чтобы создать каталог, как .tar файл в списке.

Вскоре после введения gzip, примерно в середине 1990-х годов, тот же патентный спор поставил под сомнение свободное использование .gif формат изображения, очень широко используемый на досках объявлений и во всемирной паутине (новинка того времени). Таким образом, небольшая группа создала PNG-формат без потерь без сжатия, с типом файла .png, заменить .gif, В этом формате также используется формат Deflate для сжатия, который применяется после того, как фильтры данных изображения раскрывают больше избыточности. Чтобы способствовать широкому использованию формата PNG, были созданы две бесплатные библиотеки кода. libpng и zlib. libpng обрабатывает все функции формата PNG, а zlib предоставляет код сжатия и распаковки для использования libpng, а также для других приложений. Zlib был адаптирован из gzip код.

Все упомянутые патенты истекли.

Библиотека zlib поддерживает сжатие и распаковку Deflate и три вида обтекания потоков deflate. К ним относятся: отсутствие переноса вообще ("сырой" дефлят), перенос zlib, который используется в блоках данных формата PNG, и перенос gzip для предоставления подпрограмм gzip для программиста. Основное различие между zlib и gzip-упаковкой заключается в том, что zlib-упаковка более компактна: шесть байт против минимум 18 байт для gzip, а проверка целостности Adler-32 выполняется быстрее, чем CRC-32, который использует gzip. Raw deflate используется программами, которые читают и пишут .zip формат, который является другим форматом, который оборачивает сжатие сжатых данных.

В настоящее время zlib широко используется для передачи и хранения данных. Например, большинство HTTP-транзакций серверами и браузерами сжимают и распаковывают данные, используя zlib.

Разные реализации deflate могут приводить к разным сжатым выходным данным для одних и тех же входных данных, о чем свидетельствует наличие выбираемых уровней сжатия, которые позволяют компенсировать эффективность сжатия за время CPU. zlib и PKZIP не являются единственными реализациями сжатия и распаковки с раздувом. Как утилита архивирования 7-Zip, так и библиотека Google zopfli имеют возможность использовать гораздо больше процессорного времени, чем zlib, чтобы выжать последние несколько битов при использовании формата deflate, сократив сжатые размеры на несколько процентов по сравнению с самым высоким zlib. уровень сжатия. Утилита pigz, параллельная реализация gzip, включает возможность использовать zlib (уровни сжатия 1-9) или zopfli (уровень сжатия 11) и несколько смягчает влияние времени на использование zopfli, разделяя сжатие больших файлов на несколько процессоров. и ядра.

ZIP - это формат файла, используемый для хранения произвольного количества файлов и папок вместе со сжатием без потерь. Он не делает строгих предположений об используемых методах сжатия, но чаще всего используется с DEFLATE.

Gzip - это и алгоритм сжатия, основанный на DEFLATE, но менее обремененный потенциальными патентами и др., И формат файла для хранения одного сжатого файла. Он поддерживает сжатие произвольного количества файлов и папок в сочетании с tar. Полученный файл имеет расширение .tgz или же .tar.gz и обычно называется тарболл.

zlib - это библиотека функций, инкапсулирующих DEFLATE в своем наиболее распространенном воплощении LZ77.

Самое важное отличие состоит в том, что gzip способен сжимать только один файл, тогда как zip сжимает несколько файлов один за другим и впоследствии архивирует их в один файл. Таким образом, gzip идет вместе с tar большую часть времени (хотя есть и другие возможности). Это сопровождается некоторыми (не) преимуществами.

Если у вас большой архив, и вам нужен только один единственный файл, вам нужно распаковать весь файл gzip, чтобы получить к нему доступ. Это не требуется, если у вас есть ZIP-файл.

С другой стороны, если вы сжимаете 10 одинаковых или даже одинаковых файлов, zip-архив будет намного больше, потому что каждый файл сжимается индивидуально, тогда как в gzip в сочетании с tar сжимается один файл, что гораздо эффективнее, если файлы похож (равно).

Другие вопросы по тегам