Početna » kako da » Zašto je Zip sposoban komprimirati pojedinačne datoteke bolje od više datoteka s istim sadržajem?

    Zašto je Zip sposoban komprimirati pojedinačne datoteke bolje od više datoteka s istim sadržajem?

    Biti u mogućnosti komprimirati naše datoteke, tako da je lakše dijeliti i / ili ih prenijeti može učiniti naše elektronske živote mnogo lakše, ali ponekad možemo vidjeti čudne ili neočekivane rezultate dimenzioniranja nakon što ih stisnemo. Zašto je to? Današnja postova s ​​pitanjima o odgovorima korisnika imaju odgovore na zbunjena pitanja čitatelja.

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Fotografija ljubaznošću Jean-Etienne Minh-Duy Poirrier (Flickr).

    Pitanje

    Čitač SuperUser sixtyfootersdude želi znati zašto zip može komprimirati pojedinačne datoteke bolje od više datoteka s istom vrstom sadržaja:

    Pretpostavimo da imam 10.000 XML datoteka i želim ih poslati prijatelju. Prije nego što ih pošaljem, htio bih ih sažeti.

    Metoda 1: Ne komprimirajte ih

    Rezultati:

    Metoda 2: Zabilježite svaku datoteku odvojeno i pošaljite mu 10.000 komprimiranih XML datoteka

    naredba:

    Rezultati:

    Treća metoda: Stvaranje pojedinačne Zip datoteke koja sadrži svih 10.000 XML datoteka

    naredba:

    Rezultati:

    Četvrta metoda: Povežite datoteke u jednu datoteku i zipajte je

    naredba:

    Rezultati:

    Pitanja

    • Zašto dobivam tako dramatično bolje rezultate kada samo zipujem jednu datoteku?
    • Očekivao sam da ću dobiti drastično bolje rezultate metodom 3 umjesto metodom 2, ali ne. Zašto je ovo?
    • Je li to ponašanje specifično za zip? Ako bih pokušao koristiti Gzip, dobio bih različite rezultate?

    Dodatne informacije

    Meta podaci

    Jedan od ponuđenih odgovora sugerira da je razlika meta podataka sustava pohranjena u zip datoteci. Ne vjerujem da je to slučaj. Da bih je testirao, učinio sam sljedeće:

    Rezultat je zip datoteka od 1,4 MB. To znači da još uvijek ima oko 10 MB neobjašnjenog prostora.

    Zašto je zip sposoban komprimirati pojedinačne datoteke bolje od više datoteka s istom vrstom sadržaja?

    Odgovor

    Suradnici SuperUser Alan Shutko i Aganju imaju odgovor za nas. Prvo gore, Alan Shutko:

    Zip kompresija temelji se na ponavljajućim uzorcima u podacima koji se komprimiraju, a kompresija postaje bolja što je datoteka dulja, jer se sve više i više uzoraka može pronaći i koristiti.

    Pojednostavljeno, ako komprimirate jednu datoteku, rječnik koji mapira (kratke) kodove na (dulje) obrasce nužno je sadržan u svakom rezultirajućem zip datoteku; ako zakopčate jednu dugačku datoteku, rječnik se "ponovno koristi" i postaje još učinkovitiji u svim sadržajima.

    Ako su vaše datoteke čak pomalo slične (kao što je tekst uvijek), ponovno korištenje "rječnika" postaje vrlo učinkovito i rezultat je mnogo manji ukupni zip datoteka.

    Slijedi odgovor iz Aganjua:

    U zipu se svaka datoteka komprimira zasebno. Suprotno je čvrsta kompresija, to jest, datoteke se komprimiraju zajedno. 7-zip i Rar koriste čvrstu kompresiju prema zadanim postavkama. Gzip i Bzip2 ne mogu komprimirati više datoteka, tako da se prvo koristi Tar, koji ima isti učinak kao i čvrsta kompresija.

    Kako xml datoteke imaju sličnu strukturu (i vjerojatno sličan sadržaj), ako su datoteke komprimirane zajedno, kompresija će biti veća.

    Na primjer, ako datoteka sadrži niz “"I kompresor je već pronašao taj niz u drugoj datoteci, zamijenit će ga malim pokazivačem na prethodni. Ako kompresor ne koristi čvrstu kompresiju, prva pojava niza u datoteci bit će zabilježena kao doslovan, koji je veći.


    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.