Kotisivu » miten » Miksi Zip pystyy puristamaan yksittäisiä tiedostoja paremmin kuin useita tiedostoja, joilla on sama sisältö?

    Miksi Zip pystyy puristamaan yksittäisiä tiedostoja paremmin kuin useita tiedostoja, joilla on sama sisältö?

    Mahdollisuus pakata tiedostomme siten, että niitä on helpompi jakaa ja / tai kuljettaa, voi helpottaa sähköistä elämäämme, mutta joskus voimme nähdä pariton tai odottamattomia kokoluokittelutuloksia, kun pakataan ne. Miksi niin? Tämän päivän SuperUser Q&A -postissa on vastaukset sekavaan lukijakysymykseen.

    Nykypäivän Kysymys- ja vastaus -istunto tulee meille suotuisasti SuperUserin - Stack Exchange -alueen, yhteisöpohjaisen Q & A-sivustojen ryhmittymän - kautta..

    Kuva: Jean-Etienne Minh-Duy Poirrier (Flickr).

    Kysymys

    SuperUser-lukija sixtyfootersdude haluaa tietää, miksi zip voi pakata yksittäisiä tiedostoja paremmin kuin useita samantyyppistä sisältöä sisältäviä tiedostoja:

    Oletetaan, että minulla on 10 000 XML-tiedostoa ja haluan lähettää ne ystävälle. Ennen kuin lähetät ne, haluaisin pakata ne.

    Tapa 1: Älä purista niitä

    tulokset:

    Tapa 2: Zip jokainen tiedosto erikseen ja lähetä hänelle 10 000 zip-XML-tiedostoa

    Komento:

    tulokset:

    Tapa 3: Luo yksittäinen zip-tiedosto, joka sisältää kaikki 10 000 XML-tiedostoa

    Komento:

    tulokset:

    Tapa 4: Yhdistä tiedostot yhteen tiedostoon ja kiinnitä se

    Komento:

    tulokset:

    kysymykset

    • Miksi saan niin dramaattisesti parempia tuloksia, kun olen vain yhden tiedoston?
    • Odotin, että saan dramaattisesti parempia tuloksia käyttämällä menetelmää 3 eikä menetelmää 2, mutta en. Miksi tämä on?
    • Onko tämä ongelma erityinen zipille? Jos yritin käyttää Gzipiä, saisin eri tuloksia?

    Lisätiedot

    Metatiedot

    Yksi annetuista vastauksista viittaa siihen, että ero on järjestelmän metatiedot, jotka tallennetaan zip-tiedostoon. En usko, että näin voi olla. Voit testata sen seuraavasti:

    Tuloksena oleva zip-tiedosto on 1,4 MB. Tämä tarkoittaa, että vielä on noin kymmenen MB selittämätöntä tilaa.

    Miksi zip voi pakata yksittäisiä tiedostoja paremmin kuin useita samantyyppistä sisältöä sisältäviä tiedostoja?

    Vastaus

    SuperUserin avustajat Alan Shutko ja Aganju ovat vastaus meille. Ensinnäkin, Alan Shutko:

    Zip-pakkaus perustuu pakattavien tietojen toistuviin kuvioihin, ja pakkaus paranee, mitä kauemmin tiedosto on, koska yhä useampia kuvioita löytyy ja käytetään.

    Yksinkertaistettu, jos pakataan yksi tiedosto, sanakirja, joka kartoittaa (lyhyet) koodit (pidempiin) kuvioihin, sisältyy välttämättä jokaiseen tuloksena olevaan zip-tiedostoon; jos lähetät yhden pitkän tiedoston, sanakirja käytetään uudelleen ja kasvaa entistä tehokkaammin koko sisällön osalta.

    Jos tiedostosi ovat jopa vähän samankaltaisia ​​(kuten teksti on aina), sanakirjan uudelleenkäyttö muuttuu erittäin tehokkaaksi ja tulos on paljon pienempi kokonaisbip-tiedosto.

    Aganjun vastaus:

    Zipissa jokainen tiedosto pakataan erikseen. Vastakohta on kiinteä puristus, toisin sanoen tiedostot pakataan yhteen. 7-zip ja Rar käyttävät kiinteää pakkausta oletusarvoisesti. Gzip ja Bzip2 eivät voi pakata useita tiedostoja, joten Tar käytetään ensimmäisenä, jolla on sama vaikutus kuin kiinteällä pakkauksella.

    Koska xml-tiedostoilla on samanlainen rakenne (ja todennäköisesti samanlainen sisältö), jos tiedostot pakataan yhteen, pakkaus on suurempi.

    Jos tiedosto sisältää esimerkiksi merkkijonon ””Ja kompressori on jo löytänyt kyseisen merkkijonon toisessa tiedostossa, se korvaa sen pienellä osoittimella edelliseen otteluun. Jos kompressori ei käytä kiinteää puristusta, merkkijonon ensimmäinen esiintyminen tiedostossa tallennetaan a kirjaimellinen, joka on suurempi.


    Onko jotain lisättävää selitykseen? Ääni pois kommenteista. Haluatko lukea lisää vastauksia muilta tech-savvy Stack Exchange -käyttäjiltä? Tutustu koko keskusteluketjuun täällä.