it-swarm.com.ru

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

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

887
Abhishek Jain

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

.Zip - это формат архива с использованием, как правило, метод сжатия Deflate . .gz gzip format для отдельных файлов, также с использованием метода сжатия 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 (.odt, .ods, .odp) и файлы EPUB (.epub). Этот стандарт ограничивает методы сжатия 0 и 8, а также другие ограничения, такие как отсутствие шифрования или подписей.

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

В начале 90-х гг. формат gzip был разработан как замена для утилита Unix compress , полученная из кода Deflate в утилитах Info-Zip. Unix 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 wrapping , который используется в блоках данных формата PNG, и перенос gzip, чтобы предоставить программисту процедуры gzip. Основное различие между zlib и gzip-упаковкой заключается в том, что zlib-оболочка более компактна: шесть байт против минимум 18 байт для gzip, а проверка целостности Adler-32 выполняется быстрее, чем CRC-32, который использует gzip. Raw deflate используется программами, которые читают и записывают формат .Zip, который является другим форматом, который оборачивает сжатие сжатых данных.

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

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

2323
Mark Adler

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

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

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

40
Niels Keurentjes

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

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

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

25
Tim Zimmermann