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


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


793
2017-12-24 13:48


asal


Jawaban:


Bentuk pendek:

.zip adalah format arsip menggunakan, biasanya, Deflate metode kompresi. Itu .gz format gzip adalah untuk file tunggal, juga menggunakan metode kompresi Deflate. Seringkali gzip digunakan dalam kombinasi dengan tar untuk membuat format arsip terkompresi, .tar.gz. Itu pustaka zlib menyediakan kode kompresi dan dekompresi Deflate untuk digunakan oleh zip, gzip, png (yang menggunakan pembungkus zlib pada data deflate), dan banyak aplikasi lainnya.

Bentuk panjang:

Itu 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-file, serta struktur direktori, dapat dienkripsi secara opsional.

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 sampai 7 bersifat historis dan tidak digunakan. Metode 9 hingga 98 adalah penambahan yang relatif baru, dan bervariasi, sejumlah kecil penggunaan. Satu-satunya metode yang benar-benar digunakan secara luas dalam format ZIP adalah metode 8, Menurunkan, dan untuk beberapa metode yang lebih kecil 0, yang tidak ada kompresi sama sekali. Hampir setiap .zip file yang akan Anda temui di alam liar akan menggunakan metode 8 dan 0 secara eksklusif, kemungkinan hanya metode 8. (Metode 8 juga memiliki sarana untuk menyimpan data secara efektif tanpa kompresi dan ekspansi yang relatif sedikit, dan Metode 0 tidak dapat dialirkan sedangkan Metode 8 bisa.)

Itu ISO / IEC 21320-1: standar 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), file Format Dokumen Office (.odt, .ods, .odp), dan file EPUB (.epub). Standar itu membatasi metode kompresi ke 0 dan 8, serta batasan lain seperti tidak ada enkripsi atau tanda tangan.

Sekitar tahun 1990, Kelompok Info-ZIP menulis portable, bebas, implementasi open source dari zip dan unzip utilitas, mendukung kompresi dengan format Deflate, dan dekompresi dari itu dan format sebelumnya. Ini sangat memperluas penggunaan .zip format.

Di awal 90-an, itu format gzip dikembangkan sebagai pengganti untuk Unix compress utilitas, berasal dari kode Deflate di utilitas Info-ZIP. Unix compress dirancang untuk mengompres file atau aliran tunggal, menambahkan a .Z ke nama file. compress menggunakan Algoritma kompresi LZW, yang pada saat itu dipatenkan dan penggunaannya bebas diperselisihkan oleh pemegang paten. Meskipun beberapa penerapan Deflate spesifik dipatenkan oleh Phil Katz, formatnya tidak, sehingga dimungkinkan untuk menulis implementasi Deflate yang tidak melanggar paten apa pun. Implementasi itu belum begitu menantang dalam 20 tahun terakhir. The Unix gziputilitas dimaksudkan sebagai pengganti drop-in untuk compress, dan nyatanya mampu melakukan dekompresi compress-kompresi data (dengan asumsi bahwa Anda mampu menguraikan kalimat itu). gzip menambahkan a .gz ke nama file. gzip menggunakan format data terkompresi Deflate, yang memadatkan sedikit lebih baik daripada Unix compress, memiliki dekompresi yang sangat cepat, dan menambahkan CRC-32 sebagai pemeriksaan integritas untuk data. Format header juga memungkinkan penyimpanan informasi lebih dari pada compress format yang diizinkan, seperti nama file asli dan waktu modifikasi file.

Meskipun compress hanya kompres file tunggal, itu umum untuk menggunakan tar utilitas untuk membuat arsip file, atributnya, dan struktur direktori mereka menjadi satu .tar file, dan kemudian kompres dengan compress untuk membuat sebuah .tar.Z mengajukan. Sebenarnya itu tar utilitas memiliki dan masih memiliki opsi untuk melakukan kompresi pada saat yang sama, daripada harus menyalurkan output tar untuk compress. Ini semua dibawa ke format gzip, dan tar memiliki opsi untuk memampatkan secara langsung ke .tar.gz format. Itu tar.gz format kompres lebih baik daripada .zip pendekatan, karena kompresi a .tar dapat memanfaatkan redundansi di seluruh file, terutama banyak file kecil. .tar.gz adalah format arsip paling umum yang digunakan pada Unix karena portabilitasnya sangat tinggi, tetapi ada metode kompresi yang lebih efektif yang digunakan juga, jadi Anda akan sering melihat .tar.bz2 dan .tar.xz arsip.

Tidak seperti .tar, .zip memiliki direktori pusat di bagian akhir, yang menyediakan daftar isi. Itu dan kompresi terpisah menyediakan akses acak ke entri individu dalam .zip mengajukan. SEBUAH .tar file harus didekompresi dan dipindai dari awal hingga akhir untuk membangun direktori, yang adalah bagaimana a .tar file terdaftar.

Tak lama setelah pengenalan gzip, sekitar pertengahan tahun 1990-an, sengketa paten yang sama dipertanyakan penggunaan gratis dari .gif format gambar, sangat banyak digunakan di papan buletin dan World Wide Web (hal baru pada saat itu). Jadi kelompok kecil membuat format gambar PNG yang tanpa kehilangan kompresi, dengan jenis 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 pustaka kode gratis dibuat. libpng dan zlib. libpng menangani semua fitur dari format PNG, dan zlib menyediakan kode kompresi dan dekompresi untuk digunakan oleh libpng, serta untuk aplikasi lain. zlib diadaptasi dari gzip kode.

Semua paten yang disebutkan telah habis masa berlakunya.

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

zlib sekarang digunakan secara luas untuk transmisi dan penyimpanan data. Misalnya, sebagian besar transaksi HTTP oleh server dan browser mengompres dan mendekompresi data menggunakan zlib.

Implementasi deflate yang berbeda dapat menghasilkan output kompresi yang berbeda untuk data input yang sama, sebagaimana dibuktikan oleh adanya tingkat kompresi yang dapat dipilih yang memungkinkan perdagangan dari keefektifan kompresi untuk waktu CPU. zlib dan PKZIP bukan satu-satunya implementasi kompresi dan dekompresi deflate. Keduanya Utilitas pengarsipan 7-Zip dan Google perpustakaan zopfli memiliki kemampuan untuk menggunakan lebih banyak waktu CPU daripada zlib untuk memeras beberapa bit terakhir mungkin ketika menggunakan format deflate, mengurangi ukuran kompresi dengan beberapa persen dibandingkan dengan tingkat kompresi tertinggi zlib. Itu utilitas pigz, implementasi paralel gzip, termasuk opsi untuk menggunakan zlib (tingkat kompresi 1-9) atau zopfli (tingkat kompresi 11), dan agak mengurangi dampak waktu menggunakan zopfli dengan memisahkan kompresi file besar melalui beberapa prosesor dan inti.


2077
2017-12-24 18:03



zip adalah format file yang digunakan untuk menyimpan sejumlah file dan folder sewenang-wenang bersama dengan kompresi lossless. Itu tidak membuat asumsi yang ketat tentang metode kompresi yang digunakan, tetapi yang paling sering digunakan MENURUNKAN.

Gzip keduanya merupakan algoritma kompresi berdasarkan DEFLATE tetapi kurang dibebani dengan potensi paten et al, dan format file untuk menyimpan file terkompresi tunggal. Ini mendukung mengompresi sejumlah file dan folder sembarang bila dikombinasikan dengan ter. File yang dihasilkan memiliki ekstensi .tgz atau .tar.gz dan biasa disebut a tarball.

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


38
2017-12-24 13:55



Perbedaan yang paling penting adalah bahwa gzip hanya mampu mengkompresi file tunggal sementara zip mengompres banyak file satu per satu dan mengarsipkannya ke dalam satu file setelahnya. Jadi, gzip selalu bersama dengan tar (ada kemungkinan lain). Ini datang bersama dengan beberapa keuntungan (dis).
Jika Anda memiliki arsip besar dan Anda hanya perlu satu file tunggal dari itu, Anda harus mendekompres file gzip keseluruhan untuk mendapatkan file itu. Ini tidak diperlukan jika Anda memiliki file zip.
Di sisi lain, jika Anda memadatkan 10 file yang mirip atau bahkan identik, arsip zip akan jauh lebih besar karena setiap file dikompresi secara individual, sedangkan di gzip yang dikombinasikan dengan tar, satu file dikompresi yang jauh lebih efektif jika file serupa (sama).


24
2017-12-24 14:03