Bagaimana zlib, gzip, dan zip terkait? Apa kesamaan mereka dan apa bedanya?

948

Algoritma kompresi yang digunakan dalam zlib pada dasarnya sama dengan yang ada di gzip dan zip . Apa itu gzip dan zip ? Bagaimana mereka berbeda dan bagaimana mereka sama?

Abhishek Jain
sumber

Jawaban:

2476

Bentuk pendek:

.zipadalah format arsip yang menggunakan, biasanya, metode kompresi Deflate . The .gzFormat gzip adalah untuk file tunggal, juga menggunakan metode kompresi Deflate. Sering gzip digunakan dalam kombinasi dengan tar untuk membuat format arsip terkompresi , .tar.gz. The perpustakaan zlib memberikan Deflate kompresi dan dekompresi kode untuk digunakan oleh zip, gzip, png (yang menggunakan pembungkus zlib data mengempis), dan banyak aplikasi lainnya.

Bentuk panjang:

The format ZIP dikembangkan oleh Phil Katz sebagai format terbuka dengan spesifikasi terbuka, di mana implementasinya, PKZIP, adalah shareware. Ini adalah format arsip yang menyimpan file dan struktur direktori mereka, di mana setiap file dikompresi secara individual. Jenis file adalah .zip. File, serta struktur direktori, secara opsional dapat dienkripsi.

Format ZIP mendukung beberapa metode kompresi:

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

Metode 1 hingga 7 bersifat historis dan tidak digunakan. Metode 9 hingga 98 adalah tambahan yang relatif baru, dan dalam variasi, jumlah penggunaan yang kecil. Satu-satunya metode yang benar-benar digunakan secara luas dalam format ZIP adalah metode 8, Mengempis , dan untuk beberapa metode yang lebih kecil 0, yang tidak ada kompresi sama sekali. Hampir setiap .zipfile yang Anda temui di alam bebas akan menggunakan metode 8 dan 0, kemungkinan hanya metode 8. (Metode 8 juga memiliki cara untuk secara efektif menyimpan data tanpa kompresi dan ekspansi yang relatif sedikit, dan Metode 0 tidak dapat dialirkan sedangkan Metode 8 bisa.)

Standar ISO / IEC 21320-1: 2015 untuk wadah file adalah format zip terbatas, seperti yang digunakan dalam file arsip Java (.jar), file Office Open XML (Microsoft Office .docx, .xlsx, .pptx), Dokumen Office Memformat file (.odt, .ods, .odp), dan file EPUB (.epub). Standar itu membatasi metode kompresi ke 0 dan 8, serta kendala lain seperti tidak ada enkripsi atau tanda tangan.

Sekitar tahun 1990, kelompok Info-ZIP menulis portabel dan bebas, implementasi zipdan unziputilitas open source , mendukung kompresi dengan format Deflate, dan dekompresi dari itu dan format sebelumnya. Ini sangat memperluas penggunaan .zipformat.

Pada awal 90-an, format gzip dikembangkan sebagai pengganti utilitas Unixcompress , yang berasal dari kode Deflate di utilitas Info-ZIP. Unix compressdirancang untuk mengkompres satu file atau streaming, menambahkan .Zke nama file. compressmenggunakan algoritma kompresi LZW , yang pada saat itu sedang dipatenkan dan penggunaannya bebas dalam perselisihan oleh pemegang paten. Meskipun beberapa implementasi spesifik Deflate dipatenkan oleh Phil Katz, formatnya tidak, dan jadi mungkin untuk menulis implementasi Deflate yang tidak melanggar paten apa pun. Implementasi itu tidak begitu ditantang dalam 20 + tahun terakhir. gzipUtilitas Unix dimaksudkan sebagai pengganti drop-in untukcompress, dan ternyata mampu mendekompres compress-kompresi data (dengan asumsi bahwa Anda dapat menguraikan kalimat itu). gzipmenambahkan .gzke nama file. gzipmenggunakan format data terkompresi Deflate, yang kompres sedikit lebih baik dari Unix compress, memiliki dekompresi yang sangat cepat, dan menambahkan CRC-32 sebagai pemeriksaan integritas untuk data. Format tajuk juga memungkinkan penyimpanan lebih banyak informasi daripada compressformat yang diizinkan, seperti nama file asli dan waktu modifikasi file.

Meskipun compresshanya memampatkan satu file, itu umum untuk menggunakan tarutilitas untuk membuat arsip file, atribut mereka, dan struktur direktori mereka menjadi satu .tarfile, dan kemudian kompres dengan compressmembuat .tar.Zfile. Bahkan tarutilitas itu memiliki dan masih memiliki opsi untuk melakukan kompresi pada saat yang sama, daripada harus menyalurkan output tarke compress. Ini semua diteruskan ke format gzip, dan tarmemiliki opsi untuk kompres langsung ke .tar.gzformat. The tar.gzFormat kompres lebih baik daripada .zippendekatan, karena kompresi dari .tardapat mengambil keuntungan dari redundansi di file, terutama banyak file kecil. .tar.gzadalah format arsip yang paling umum digunakan di Unix karena portabilitasnya yang sangat tinggi, tetapi ada metode kompresi yang lebih efektif digunakan juga, sehingga Anda akan sering melihat .tar.bz2dan .tar.xzmengarsipkan.

Tidak seperti .tar, .zipmemiliki direktori pusat di bagian akhir, yang menyediakan daftar konten. Itu dan kompresi terpisah menyediakan akses acak ke entri individu dalam .zipfile. Sebuah .tarfile yang akan harus didekompresi dan dipindai dari awal sampai akhir untuk membangun sebuah direktori, yang adalah bagaimana sebuah .tarfile yang terdaftar.

Tak lama setelah diperkenalkannya gzip, sekitar pertengahan 1990-an, sengketa paten yang sama mempersoalkan penggunaan bebas .gifformat gambar, sangat banyak digunakan pada papan buletin dan World Wide Web (hal baru pada waktu itu). Jadi kelompok kecil membuat format gambar terkompresi PNG lossless, dengan tipe file .png, untuk menggantikan .gif. Format itu juga menggunakan format Deflate untuk kompresi, yang diterapkan setelah filter pada data gambar mengekspos lebih banyak redundansi. Untuk mempromosikan penggunaan luas format PNG, dua perpustakaan kode gratis dibuat. libpng dan zlib. libpng menangani semua fitur format PNG, dan zlib menyediakan kode kompresi dan dekompresi untuk digunakan oleh libpng, serta untuk aplikasi lain. zlib diadaptasi dari gzipkode.

Semua paten yang disebutkan telah berakhir.

Pustaka zlib mendukung Deflate kompresi dan dekompresi, dan tiga jenis pembungkus di sekitar aliran deflate. Yaitu: tidak ada pembungkus sama sekali (deflate "mentah"), pembungkus zlib , yang digunakan dalam blok data format PNG, dan pembungkus gzip, untuk menyediakan rutinitas gzip untuk programmer. Perbedaan utama antara pembungkus zlib dan gzip adalah bahwa pembungkus zlib lebih kompak, enam byte vs. minimum 18 byte untuk gzip, dan pemeriksaan integritas, Adler-32, berjalan lebih cepat daripada CRC-32 yang digunakan gzip gunakan. Raw deflate digunakan oleh program yang membaca dan menulis .zipformat, yang merupakan format lain yang membungkus deflate data terkompresi.

zlib sekarang digunakan secara luas untuk transmisi dan penyimpanan data. Sebagai contoh, sebagian besar transaksi HTTP oleh server dan browser mengkompres dan mendekompres data menggunakan zlib, khususnya HTTP header Content-Encoding: deflateberarti mengempiskan metode kompresi yang dibungkus dalam format data zlib .

Implementasi deflate yang berbeda dapat menghasilkan output terkompresi yang berbeda untuk data input yang sama, sebagaimana dibuktikan oleh adanya tingkat kompresi yang dapat dipilih yang memungkinkan pertukaran efektivitas kompresi untuk waktu CPU. zlib dan PKZIP bukan satu-satunya implementasi dari deflate compression dan decompression. Kedua 7-Zip pengarsipan utilitas dan Google perpustakaan zopfli memiliki kemampuan untuk menggunakan lebih banyak waktu CPU dari zlib untuk memeras beberapa bit terakhir mungkin ketika menggunakan format mengempis, mengurangi ukuran dikompresi oleh beberapa persen dibandingkan dengan zlib tertinggi tingkat kompresi. The pigz utilitas, implementasi paralel dari gzip, termasuk opsi untuk menggunakan zlib (level kompresi 1-9) atau zopfli (level kompresi 11), dan agak mengurangi dampak waktu penggunaan zopfli dengan memisahkan kompresi file besar melalui banyak prosesor dan core.

Mark Adler
sumber
113
Posting ini dikemas dengan begitu banyak sejarah dan informasi sehingga saya merasa beberapa kutipan perlu ditambahkan jika orang mencoba untuk merujuk posting ini sebagai sumber informasi. Meskipun jika informasi ini tercermin di suatu tempat dengan kutipan seperti Wikipedia, tautan ke karya yang dikutip serupa akan dihargai.
ThorSummoner
1348
Saya adalah rujukan, telah menjadi bagian dari semua itu. Posting ini dapat dikutip di Wikipedia sebagai sumber asli.
Mark Adler
524
FYI: Mark Adler adalah insinyur perangkat lunak Amerika, dan telah banyak terlibat dalam eksplorasi ruang angkasa. Dia terkenal karena karyanya di bidang kompresi data sebagai penulis fungsi Adler-32 checksum, dan penulis bersama perpustakaan kompresi zlib dan gzip. Dia telah berkontribusi pada Info-ZIP, dan telah berpartisipasi dalam mengembangkan format gambar Portable Network Graphics (PNG). Adler juga Manajer Misi Pelayaran Roh untuk misi Mars Exploration Rover. (wikipedia)
Isaac Hanson
99
gzip dibuat untuk menggantikan kompres Unix. zip tidak lebih baik daripada tar + gzip di Unix, karena beberapa alasan. (Ketika Anda melihat .tar.gzfile, itulah mereka.) Pertama, tar + gzip kompres lebih baik daripada zip, karena kompresi file selanjutnya dapat menggunakan riwayat dari file sebelumnya (kadang-kadang disebut sebagai "solid" arsip). zip hanya dapat mengkompres file secara individual. Kedua, tar mempertahankan semua informasi direktori Unix, sedangkan zip tidak dirancang untuk melakukan itu. (Kemudian ekstensi ke format zip dengan blok tambahan khusus-Unix mencoba untuk memperbaiki masalah ini.)
Mark Adler
85
Anda tampaknya membingungkan format dengan implementasi. Implementasi 7-Zip dari format deflate bisa mendapatkan sesuatu seperti kompresi 2% hingga 10% Anda yang lebih baik daripada gzip dengan format deflate yang sama (sambil mengambil lebih banyak waktu CPU untuk melakukannya). Format 7Z LZMA2 menawarkan kompresi 40% lebih baik.
Mark Adler
43

ZIP adalah format file yang digunakan untuk menyimpan sejumlah file dan folder sembarang bersama dengan kompresi lossless. Itu tidak membuat asumsi ketat tentang metode kompresi yang digunakan, tetapi paling sering digunakan dengan DEFLATE .

Gzip adalah algoritma kompresi yang didasarkan pada DEFLATE tetapi kurang dibebani dengan paten potensial dkk, dan format file untuk menyimpan satu file terkompresi. Ini mendukung mengompresi jumlah file dan folder yang berubah-ubah ketika dikombinasikan dengan tar . File yang dihasilkan memiliki ekstensi .tgzatau .tar.gzdan biasanya disebut tarball .

zlib adalah pustaka fungsi yang merangkum DEFLATE dalam inkarnasi LZ77 yang paling umum .

Niels Keurentjes
sumber
28

Perbedaan yang paling penting adalah bahwa gzip hanya mampu mengkompres satu file sementara zip memampatkan beberapa file satu per satu dan mengarsipkannya menjadi satu file tunggal sesudahnya. Jadi, gzip datang bersama dengan tar sebagian besar waktu (ada kemungkinan lain, meskipun). Ini datang bersama dengan beberapa (dis) keuntungan.

Jika Anda memiliki arsip besar dan Anda hanya perlu satu file saja, Anda harus mendekompres seluruh file gzip untuk sampai ke file itu. Ini tidak diperlukan jika Anda memiliki file zip.

Di sisi lain, jika Anda mengompres 10 file serupa atau bahkan identik, arsip zip akan jauh lebih besar karena setiap file dikompresi secara terpisah, sedangkan dalam gzip dalam kombinasi dengan tar, satu file dikompresi yang jauh lebih efektif jika file tersebut serupa (sama).

Tim Zimmermann
sumber
8
Anda melebih-lebihkan intinya. Jika orang menginginkan arsip terkompresi akses-acak, mereka dapat membuat file ".gz.tar" alih-alih file ".tar.gz". Mereka tidak, karena kebanyakan orang tidak tertarik pada akses acak. Ada komunitas besar di sekitar format pengarsipan web .warc.gz, dan mereka membutuhkan akses acak, sehingga mereka mengompres setiap halaman web secara terpisah. Anda menggunakan format ini setiap kali Anda melihat halaman web di Internet Archive Wayback Machine.
Greg Lindahl
2
".gz.tar" tidak menawarkan akses acak karena format tar tidak dapat mengakses entri secara acak. Anda harus melalui semua entri dari awal untuk mendapatkan satu entri spesifik yang diinginkan, bahkan lebih buruk: Anda harus melewati semua entri sampai akhir karena file yang sama dapat diarsipkan beberapa kali (dalam beberapa versi) di beberapa tempat dalam arsip yang sama - dan tidak ada cara untuk mengetahuinya kecuali membaca seluruh entri arsip dengan entri.
Min-Soo Pipefeet