Алгоритм сжатия, используемый в zlib, по сути такой же, как в gzip и zip . Что такое gzip и zip ? Чем они отличаются и как они одинаковы?
Алгоритм сжатия, используемый в zlib, по сути такой же, как в gzip и zip . Что такое gzip и zip ? Чем они отличаются и как они одинаковы?
Ответы:
Краткая форма:
.zip
это формат архива, использующий, как правило, метод сжатия Deflate . Формат .gz
gzip предназначен для отдельных файлов, также с использованием метода сжатия Deflate. Часто GZIP используется в сочетании с дегтем , чтобы сделать сжатый архивный формат , .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 был разработан в качестве замены для утилиты Unixcompress
, выведенной из кода Deflate в утилитах Info-ZIP. Unix compress
был разработан для сжатия одного файла или потока, добавляя .Z
к имени файла. compress
использует алгоритм сжатия LZW , который в то время находился под патентом, и его бесплатное использование оспаривалось владельцами патентов. Хотя некоторые конкретные реализации Deflate были запатентованы Филом Кацем, формат не был, и поэтому можно было написать реализацию Deflate, которая не нарушала бы никаких патентов. Эта реализация не была такой сложной в последние 20 лет. gzip
Утилита Unix была задумана как замена для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, в частности, HTTP-заголовок Content-Encoding: deflate
означает метод сжатия с дефляцией, заключенный в формат данных zlib .
Различные реализации deflate могут приводить к разным сжатым выходным данным для одних и тех же входных данных, о чем свидетельствует наличие выбираемых уровней сжатия, которые позволяют компенсировать эффективность сжатия за время процессора. zlib и PKZIP - не единственные реализации сжатия и распаковки с раздувом. И утилита архивирования 7-Zip, и библиотека Google zopfli имеют возможность использовать гораздо больше процессорного времени, чем zlib, чтобы выжать последние несколько битов при использовании формата deflate, сократив сжатые размеры на несколько процентов по сравнению с самым высоким zlib уровень сжатия. Утилита pigzпараллельная реализация gzip включает возможность использовать zlib (уровни сжатия 1-9) или zopfli (уровень сжатия 11) и несколько смягчает влияние времени на использование zopfli, разделяя сжатие больших файлов на несколько процессоров и ядер.
.tar.gz
файлы, это то, что они есть.) Во-первых, tar + gzip сжимает лучше, чем zip, поскольку при сжатии следующего файла может использоваться история из предыдущего файла (иногда его называют «сплошным» архивом). zip может сжимать файлы только индивидуально. Во-вторых, tar сохраняет всю информацию каталога Unix, тогда как zip не предназначен для этого. (Более поздние расширения в формате zip с дополнительными блоками, специфичными для Unix, пытаются решить эту проблему.)
ZIP - это формат файла, используемый для хранения произвольного количества файлов и папок вместе со сжатием без потерь. Он не делает строгих предположений об используемых методах сжатия, но чаще всего используется с DEFLATE .
Gzip - это и алгоритм сжатия, основанный на DEFLATE, но менее обремененный потенциальными патентами и др., И формат файла для хранения одного сжатого файла. Он поддерживает сжатие произвольного количества файлов и папок в сочетании с tar . Полученный файл имеет расширение .tgz
или .tar.gz
и обычно называется тарболом .
zlib - это библиотека функций, инкапсулирующих DEFLATE в своем наиболее распространенном воплощении LZ77 .
Самое важное отличие состоит в том, что gzip способен сжимать только один файл, тогда как zip сжимает несколько файлов один за другим и впоследствии архивирует их в один файл. Таким образом, gzip идет вместе с tar большую часть времени (хотя есть и другие возможности). Это сопровождается некоторыми (не) преимуществами.
Если у вас большой архив, и вам нужен только один файл из него, вам нужно распаковать весь файл gzip, чтобы добраться до этого файла. Это не требуется, если у вас есть ZIP-файл.
С другой стороны, если вы сжимаете 10 одинаковых или даже одинаковых файлов, zip-архив будет намного больше, потому что каждый файл сжимается индивидуально, тогда как в gzip в сочетании с tar сжимается один файл, что гораздо эффективнее, если файлы похож (равно).