Laman » bagaimana untuk » Mengapa Zip Dapat Memampatkan File Single Lebih Baik daripada Pelbagai Fail dengan Kandungan Sama?

    Mengapa Zip Dapat Memampatkan File Single Lebih Baik daripada Pelbagai Fail dengan Kandungan Sama?

    Mampu memampatkan fail kami supaya lebih mudah untuk berkongsi dan / atau mengangkut mereka dapat menjadikan kehidupan elektronik kami lebih mudah, tetapi kadang-kadang kami mungkin melihat hasil ukuran yang ganjil atau tak terduga setelah kami memampatkannya. Kenapa begitu? Jawatan Q & A SuperUser hari ini mempunyai jawapan kepada soalan pembaca yang keliru.

    Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.

    Gambar ihsan Jean-Etienne Minh-Duy Poirrier (Flickr).

    Soalan

    Pembaca SuperUser enam puluhfootersdude ingin tahu mengapa zip dapat memampatkan fail tunggal lebih baik daripada berbilang fail dengan jenis kandungan yang sama:

    Katakan saya mempunyai 10,000 fail XML dan mahu menghantarnya kepada rakan. Sebelum menghantar mereka, saya ingin memampatkannya.

    Kaedah 1: Jangan Tekan Mereka

    Keputusan:

    Kaedah 2: Zip Setiap Fail Secara berasingan dan Hantar 10,000 Fail XML Zipped kepadanya

    Perintah:

    Keputusan:

    Kaedah 3: Buat Fail Zip Single yang Mengandungi Semua 10,000 Fail XML

    Perintah:

    Keputusan:

    Kaedah 4: Menyusun Fail Ke Fail Single dan Zip Ia

    Perintah:

    Keputusan:

    Soalan

    • Kenapa saya mendapat hasil yang lebih dramatik dengan baik apabila saya hanya mengetip fail tunggal?
    • Saya menjangkakan untuk mendapatkan hasil yang lebih drastik dengan menggunakan kaedah 3 dan bukan kaedah 2, tetapi saya tidak. Kenapa ini?
    • Adakah perilaku ini khusus untuk zip? Jika saya cuba menggunakan Gzip, saya akan mendapat hasil yang berbeza?

    Maklumat tambahan

    Data Meta

    Salah satu jawapan yang diberikan menunjukkan bahawa perbezaannya ialah data meta sistem yang disimpan dalam fail zip. Saya tidak percaya ini boleh berlaku. Untuk mengujinya, saya melakukan perkara berikut:

    Fail zip yang terhasil ialah 1.4 MB. Ini bermakna terdapat lebih kurang sepuluh MB ruang tidak dapat diterangkan.

    Mengapa zip mampu memampatkan fail tunggal lebih baik daripada berbilang fail dengan jenis kandungan yang sama?

    Jawapan

    Penyumbang SuperUser Alan Shutko dan Aganju mempunyai jawapan untuk kami. Pertama, Alan Shutko:

    Mampatan zip didasarkan pada corak berulang dalam data yang akan dimampatkan, dan mampatan menjadi lebih baik semakin lama fail itu, kerana pola yang lebih banyak dan lebih lama dapat ditemukan dan digunakan.

    Ringkasnya, jika anda memampatkan satu fail, kamus yang memetakan kod (pendek) kepada (lebih lama) corak mesti terkandung dalam setiap fail zip yang dihasilkan; jika anda zip satu fail panjang, kamus itu 'digunakan semula' dan berkembang lebih berkesan merentasi semua kandungan.

    Sekiranya fail anda agak serupa (seperti teks selalu), penggunaan semula 'kamus' menjadi sangat cekap dan hasilnya adalah jumlah zip yang lebih kecil.

    Diikuti dengan jawapan dari Aganju:

    Dalam zip, setiap fail dimampatkan secara berasingan. Sebaliknya adalah pemampatan pepejal, iaitu, fail dimampatkan bersama. 7-zip dan Rar menggunakan mampatan pepejal secara lalai. Gzip dan Bzip2 tidak boleh memampatkan pelbagai fail, jadi Tar digunakan terlebih dahulu, dengan kesan yang sama seperti pemampatan pepejal.

    Oleh kerana fail xml mempunyai struktur yang sama (dan mungkin kandungan yang sama), jika fail dimampatkan bersama maka pemampatan akan lebih tinggi.

    Contohnya, jika fail mengandungi rentetan ""Dan pemampat telah menemui rentetan dalam fail lain, ia akan menggantinya dengan penuding kecil pada perlawanan sebelumnya. Jika pemampat tidak menggunakan mampatan pepejal, kejadian pertama rentetan dalam fail akan direkodkan sebagai literal, yang lebih besar.


    Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.