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.