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?
sumber
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?
Bentuk pendek:
.zip
adalah format arsip yang menggunakan, biasanya, metode kompresi Deflate . The .gz
Format 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 .zip
file 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 zip
dan unzip
utilitas open source , mendukung kompresi dengan format Deflate, dan dekompresi dari itu dan format sebelumnya. Ini sangat memperluas penggunaan .zip
format.
Pada awal 90-an, format gzip dikembangkan sebagai pengganti utilitas Unixcompress
, yang berasal dari kode Deflate di utilitas Info-ZIP. Unix compress
dirancang untuk mengkompres satu file atau streaming, menambahkan .Z
ke nama file. compress
menggunakan 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. gzip
Utilitas Unix dimaksudkan sebagai pengganti drop-in untukcompress
, dan ternyata mampu mendekompres compress
-kompresi data (dengan asumsi bahwa Anda dapat menguraikan kalimat itu). gzip
menambahkan .gz
ke nama file. gzip
menggunakan 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 compress
format yang diizinkan, seperti nama file asli dan waktu modifikasi file.
Meskipun compress
hanya memampatkan satu file, itu umum untuk menggunakan tar
utilitas untuk membuat arsip file, atribut mereka, dan struktur direktori mereka menjadi satu .tar
file, dan kemudian kompres dengan compress
membuat .tar.Z
file. Bahkan tar
utilitas itu memiliki dan masih memiliki opsi untuk melakukan kompresi pada saat yang sama, daripada harus menyalurkan output tar
ke compress
. Ini semua diteruskan ke format gzip, dan tar
memiliki opsi untuk kompres langsung ke .tar.gz
format. The tar.gz
Format kompres lebih baik daripada .zip
pendekatan, karena kompresi dari .tar
dapat mengambil keuntungan dari redundansi di file, terutama banyak file kecil. .tar.gz
adalah 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.bz2
dan .tar.xz
mengarsipkan.
Tidak seperti .tar
, .zip
memiliki direktori pusat di bagian akhir, yang menyediakan daftar konten. Itu dan kompresi terpisah menyediakan akses acak ke entri individu dalam .zip
file. Sebuah .tar
file yang akan harus didekompresi dan dipindai dari awal sampai akhir untuk membangun sebuah direktori, yang adalah bagaimana sebuah .tar
file yang terdaftar.
Tak lama setelah diperkenalkannya gzip, sekitar pertengahan 1990-an, sengketa paten yang sama mempersoalkan penggunaan bebas .gif
format 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 gzip
kode.
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 .zip
format, 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: deflate
berarti 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.
.tar.gz
file, 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.)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
.tgz
atau.tar.gz
dan biasanya disebut tarball .zlib adalah pustaka fungsi yang merangkum DEFLATE dalam inkarnasi LZ77 yang paling umum .
sumber
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).
sumber