Як пов’язані zlib, gzip та zip? Що у них спільного і чим вони відрізняються?


948

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

Відповіді:


2476

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

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

Довга форма:

Формат 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, дефляція та в меншій мірі метод 0, який зовсім не є стисненням. Практично кожен .zipфайл, який ви зустрінете в дикій природі, буде використовувати виключно методи 8 і 0, швидше за все, метод 8. (Метод 8 також має засоби для ефективного зберігання даних без стиснення та відносно невеликого розширення. Метод 0 не може бути потоковий тоді як метод 8 може бути.)

Стандарт ISO / IEC 21320-1: 2015 для файлових контейнерів - це формат zip з обмеженим доступом, наприклад, використовуваний у архівах Java-файлів (.jar), XML-файлах Office Open (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до імені файлу a . 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 підтримує стиснення та декомпресію дефляції та три види обгортання потоків спуску. Це: відсутність обгортання взагалі ("неочищений" дефлят), зліб-обгортка , яка використовується в блоках даних формату PNG, та обмотування gzip для надання програмістам gzip. Основна відмінність zlib від gzip обгортки полягає в тому, що упаковка zlib є більш компактною, шість байт проти мінімум 18 байт для gzip, і перевірка цілісності Adler-32 працює швидше, ніж CRC-32, який використовує gzip. Сире спуску використовується програмами, які читають і записують .zipформат, що є ще одним форматом, який обертається навколо спущених стислих даних.

Zlib зараз широко використовується для передачі та зберігання даних. Наприклад, більшість транзакцій HTTP серверами та браузерами стискають та розпаковують дані за допомогою zlib, зокрема заголовок HTTP Content-Encoding: deflateозначає дефляційний метод стиснення, загорнутий у формат даних zlib .

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


113
Ця публікація переповнена стільки історією та інформацією, що я вважаю, що потрібно додати деякі цитати, якщо люди намагаються посилатися на цю публікацію як на джерело інформації. Хоча якщо ця інформація буде відображена десь із цитатами, такими як Вікіпедія, посилання на подібні цитовані роботи будуть вдячні.
ThorSummoner

1348
Я довідник, який був частиною всього цього. Цю публікацію можна було б згадати у Вікіпедії як першоджерело.
Марк Адлер

524
FYI: Марк Адлер - американський інженер програмного забезпечення та активно брав участь у дослідженні космосу. Він найбільш відомий своєю роботою у галузі стиснення даних як автор функції контрольної суми Adler-32, а також співавтор бібліотеки стиснення zlib та gzip. Він зробив внесок у Info-ZIP та брав участь у розробці формату зображень Portable Network Graphics (PNG). Адлер також був керівником місії круїзної місії для місії Mars Exploration Rover. (wikipedia)
Ісаак Гансон

99
gzip створений для заміни компресу Unix. zip не перевершує tar + gzip на Unix з кількох причин. (Коли ви бачите .tar.gzфайли, це вони є.) По-перше, tar + gzip стискається краще, ніж zip, оскільки для стиснення наступного файлу можна використовувати історію з попереднього файлу (іноді його називають "суцільним" архівом). zip може стискати файли лише окремо. По-друге, tar зберігає всю інформацію про каталог Unix, тоді як zip не призначений для цього. (Пізніші розширення до формату zip за допомогою додаткових блоків, характерних для Unix, намагаються виправити цю проблему.)
Марк Адлер,

85
Ви начебто плутаєте формати з реалізацією. 7-Zip- реалізація формату дефляції може отримати щось на зразок ваших цитованих на 2% до 10% кращого стиснення, ніж gzip з тим самим форматом дефляції (при цьому для цього знадобиться набагато більше часу для процесора). У 7z LZMA2 формат пропозицію по порядку 40% кращого стиснення.
Марк Адлер

43

ZIP - це формат файлу, який використовується для зберігання довільної кількості файлів і папок разом із стисненням без втрат. Він не має чітких припущень щодо методів стиснення, що застосовуються, але найчастіше використовується з DEFLATE .

Gzip - це алгоритм стиснення, заснований на DEFLATE, але менш обтяжений потенційними патентами та ін., А також формат файлу для зберігання одного стисненого файлу. Він підтримує стиснення довільної кількості файлів і папок у поєднанні з tar . Отриманий файл має розширення.tgz або .tar.gzі його зазвичай називають тарболом .

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


28

Найважливіша відмінність полягає в тому, що gzip здатний стискати лише один файл, тоді як zip стискає кілька файлів один за одним і архівує їх в один файл згодом. Таким чином, gzip йде разом з дьогтем більшу частину часу (хоча є й інші можливості). Це пов'язано з деякими (не) перевагами.

Якщо у вас великий архів, і вам потрібен лише один файл із нього, вам доведеться розпакувати весь файл gzip, щоб дістатися до цього файлу. Це не потрібно, якщо у вас є поштовий файл.

З іншого боку, якщо ви стискаєте 10 подібних або навіть однакових файлів, zip-архів буде набагато більшим, оскільки кожен файл стискається окремо, тоді як у gzip у поєднанні з таром стискається один файл, що набагато ефективніше, якщо файли подібний (рівний).


8
Ви завищуєте точку. Якщо люди хотіли стиснутих архівів з випадковим доступом, вони могли створити файли ".gz.tar" замість файлів ".tar.gz". Вони цього не роблять, тому що більшість людей не так зацікавлені у випадковому доступі. Існує велика спільнота навколо формату веб-архівування .warc.gz, і їм потрібен випадковий доступ, тому вони стискають кожну веб-сторінку окремо. Ви використовуєте цей формат щоразу, коли ви переглядаєте веб-сторінку в Інтернет-архіві Wayback Machine.
Грег Ліндаль

2
".gz.tar" не пропонує випадкового доступу, оскільки формат tar не здатний довільно отримувати доступ до своїх записів. Вам потрібно пройти всі записи від початку, щоб отримати потрібний конкретний запис, ще гірше: вам потрібно пройти всі записи до кінця, оскільки один і той же файл може бути архівований кілька разів (у кількох версіях) у кількох місцях в тому ж архіві - і немає способу це зрозуміти, окрім як прочитати весь запис архіву за записом.
Min-Soo Pipefeet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.