Алгоритм стиснення, який використовується у zlib , по суті такий же, як у gzip та zip . Що таке gzip та zip ? Чим вони відрізняються і як вони однакові?
Алгоритм стиснення, який використовується у zlib , по суті такий же, як у gzip та zip . Що таке gzip та zip ? Чим вони відрізняються і як вони однакові?
Відповіді:
Коротка форма:
.zip
являє собою формат архіву, використовуючи, як правило, метод стиснення Deflate . Формат .gz
gzip призначений для одиночних файлів, також використовуючи метод стиснення 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 шляхом розподілу стиснення великих файлів на декілька процесорів та ядер.
.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 йде разом з дьогтем більшу частину часу (хоча є й інші можливості). Це пов'язано з деякими (не) перевагами.
Якщо у вас великий архів, і вам потрібен лише один файл із нього, вам доведеться розпакувати весь файл gzip, щоб дістатися до цього файлу. Це не потрібно, якщо у вас є поштовий файл.
З іншого боку, якщо ви стискаєте 10 подібних або навіть однакових файлів, zip-архів буде набагато більшим, оскільки кожен файл стискається окремо, тоді як у gzip у поєднанні з таром стискається один файл, що набагато ефективніше, якщо файли подібний (рівний).