Miks on Zip võimeline pakkima üksikuid faile paremini kui mitu sama sisu sisaldavat faili?
Võimalus tihendada oma faile nii, et neid oleks lihtsam jagada ja / või transportida, muudab meie elektroonilise elu palju lihtsamaks, kuid mõnikord näeme pärast nende kokkusurutamist paarituid või ootamatuid suurusi. Miks nii? Tänase SuperUser Q&A postituse vastused on segaduses lugeja küsimustele.
Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotis, kogukondlikult juhitav Q&A veebisaitide rühmitus.
Foto viisakalt Jean-Etienne Minh-Duy Poirrieri (Flickr) poolt.
Küsimus
SuperUser lugeja sixtyfootersdude tahab teada, miks zip suudab üksikuid faile tihendada paremini kui mitut sama tüüpi sisuga faili:
Oletame, et mul on 10 000 XML-faili ja tahan neid sõbrale saata. Enne nende saatmist tahaksin neid tihendada.
1. meetod: neid mitte tihendada
Tulemused:
2. meetod: Zip iga fail eraldi ja saatke talle 10 000 zipitud XML-faili
Käsk:
Tulemused:
3. meetod: looge ühtne Zip-fail, mis sisaldab kõiki 10 000 XML-faili
Käsk:
Tulemused:
4. meetod: ühendage failid ühte faili ja tõmmake see üles
Käsk:
Tulemused:
Küsimused
- Miks saan selliseid dramaatiliselt paremaid tulemusi, kui ma lihtsalt ühte faili kopeerin?
- Olin oodanud drastiliselt paremaid tulemusi kasutades meetodit 3, mitte 2. meetodit, kuid ma ei tee seda. Miks on see?
- Kas see käitumine on zipile omane? Kui ma Gzipi kasutades proovisin, kas ma saan erinevaid tulemusi?
Lisainfo
Metaandmed
Üks antud vastustest näitab, et erinevus on süsteemi metaandmed, mis on salvestatud zip-faili. Ma ei usu, et see võib juhtuda. Selle katsetamiseks tegin järgmist:
Saadud zip-fail on 1,4 MB. See tähendab, et veel on umbes kümme MB seletamatut ruumi.
Miks on zip võimeline üksikuid faile tihendama paremini kui mitu sama tüüpi sisuga faili?
Vastus
SuperUser'i toetajad Alan Shutko ja Aganju on meile vastuseks. Esiteks, Alan Shutko:
Zip-i kokkusurumine põhineb kokkusurutavatel andmetel esinevatel korduvatel mustritel ning tihendus muutub paremaks, seda pikem on fail, kuna leidub ja kasutatakse järjest rohkem ja pikemaid mustreid.
Lihtsustatud, kui tihendate ühe faili, sisaldab sõnastik, mis kaardistab (lühikesed) koodid (pikemad) mustrid, tingimata igasse saadud zip-faili; kui te pikendate ühe pika faili, kasutatakse sõnastikku "uuesti" ja kasvab veelgi tõhusamalt kogu sisu ulatuses.
Kui teie failid on isegi natuke sarnased (kui tekst alati on), muutub sõnaraamatu taaskasutamine väga tõhusaks ja tulemus on palju väiksem zip-fail.
Järgneb Aganju vastus:
Zipis tihendatakse iga fail eraldi. Vastupidi tahke kokkusurumine, see tähendab, et failid on kokku pressitud. 7-zip ja Rar kasutavad vaikimisi kompressiooni. Gzip ja Bzip2 ei saa tihendada mitut faili, nii et Tar kasutatakse esmalt, millel on sama mõju kui tahke tihendus.
Kuna xml-failidel on sarnane struktuur (ja tõenäoliselt sarnane sisu), siis kui failid on kokku pressitud, siis on tihendus suurem.
Näiteks, kui fail sisaldab stringi "
"Ja kompressor on selle stringi juba teises failis leidnud, see asendab selle eelmise vaste väikese kursoriga. Kui kompressor ei kasuta tahket kompressiooni, salvestatakse failis oleva stringi esimene esinemine kui a sõna otseses mõttes, mis on suurem.
Kas teil on midagi lisada selgitusele? Heli on kommentaarides välja lülitatud. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.