Domača » kako » Zakaj je Zip sposoben stiskati posamezne datoteke boljše od več datotek z isto vsebino?

    Zakaj je Zip sposoben stiskati posamezne datoteke boljše od več datotek z isto vsebino?

    Sposobnost stiskanja datotek, tako da jih je lažje deliti in / ali prevažati, lahko olajša naše elektronsko življenje, včasih pa lahko vidimo nenavadne ali nepričakovane rezultate dimenzij, ko jih stisnemo. Zakaj? Današnja postavka SuperUser Q&A ima odgovore na zmedena bralčeva vprašanja.

    Današnja seja vprašanj in odgovorov prihaja z namenom SuperUser-a, ki je del skupine Stack Exchange, ki temelji na skupnostih spletnih mest za vprašanja in odgovore.

    Fotografija podeljena z Jean-Etienne Minh-Duy Poirrier (Flickr).

    Vprašanje

    Bralnik SuperUser sixtyfootersdude želi vedeti, zakaj lahko zip stisne posamezne datoteke bolje kot več datotek z isto vrsto vsebine:

    Recimo, da imam 10.000 datotek XML in jih želim poslati prijatelju. Preden jih pošljem, bi jih rad stisnil.

    1. način: Ne stiskajte jih

    Rezultati:

    2. način: ločeno odrežite vsako datoteko in mu pošljite 10.000 zipanih datotek XML

    Ukaz:

    Rezultati:

    3. način: Ustvarite eno datoteko Zip, ki vsebuje vseh 10.000 datotek XML

    Ukaz:

    Rezultati:

    Metoda 4: Združite datoteke v eno datoteko in jo zaprite

    Ukaz:

    Rezultati:

    Vprašanja

    • Zakaj dobim tako dramatično boljše rezultate, ko samo zipujem eno datoteko?
    • Pričakovala sem, da bom dobila drastično boljše rezultate z metodo 3 in ne z metodo 2, vendar ne. Zakaj je to??
    • Ali je to vedenje značilno za zip? Če bi poskusil uporabiti Gzip, bi dobil različne rezultate?

    Dodatne informacije

    Meta podatki

    Eden od navedenih odgovorov kaže, da je razlika med sistemskimi meta podatki, ki so shranjeni v datoteki zip. Ne verjamem, da je tako. Da bi ga preizkusili, sem naredil naslednje:

    Nastala zip datoteka je 1,4 MB. To pomeni, da je še vedno približno deset MB nepojasnjenega prostora.

    Zakaj je zip sposoben stisniti posamezne datoteke bolje kot več datotek z isto vrsto vsebine?

    Odgovor

    Sodelavci SuperUser Alan Shutko in Aganju imata odgovor za nas. Prvič, Alan Shutko:

    Kompresija Zip temelji na ponavljajočih se vzorcih podatkov, ki jih želite stisniti, in stiskanje se izboljša, če je datoteka daljša, saj je mogoče najti in uporabljati več in več vzorcev.

    Poenostavljeno, če stiskate eno datoteko, je slovar, ki preslika (kratke) kode za (daljše) vzorce, nujno vsebovan v vsakem od datotek zip; če zaprete eno dolgo datoteko, se slovar ponovno uporabi in postane še bolj učinkovit v vsej vsebini.

    Če so vaše datoteke celo nekoliko podobne (kot je besedilo vedno), postane ponovna uporaba "slovarja" zelo učinkovita in rezultat je veliko manjša skupna datoteka zip.

    Sledi odgovor Aganjuja:

    V zip-u se vsaka datoteka stisne ločeno. Nasprotno je trdno stiskanje, datoteke so stisnjene skupaj. 7-zip in Rar privzeto uporabljata trdno stiskanje. Gzip in Bzip2 ne morejo stiskati več datotek, zato se najprej uporabi Tar, ki ima enak učinek kot trdno stiskanje.

    Ker imajo datoteke xml podobno strukturo (in verjetno podobno vsebino), če so datoteke stisnjene skupaj, bo stiskanje večje.

    Na primer, če datoteka vsebuje niz “"In kompresor je ta niz že našel v drugi datoteki, zamenjal ga bo z majhnim kazalcem na prejšnje ujemanje. Če kompresor ne uporablja trdnega stiskanja, se prvi pojav niza v datoteki zabeleži kot dobesedno, ki je večja.


    Imate kaj dodati pojasnilu? Zvok v komentarjih. Želite prebrati več odgovorov drugih uporabnikov tehnologije Stack Exchange? Oglejte si celotno nit razprave tukaj.