If-Koubou

Miksi Zip voi purkaa yksittäisiä tiedostoja paremmin kuin samat sisällöt?

Miksi Zip voi purkaa yksittäisiä tiedostoja paremmin kuin samat sisällöt? (Miten)

Jotta tiedostoja voidaan puristaa, jotta niiden jakaminen ja / tai kuljettaminen olisi helpompaa, sähköinen elämä voi helpommin saada aikaan, mutta toisinaan näemme parittomia tai odottamattomia mitoitustuloksia sen jälkeen, kun pakkaamme ne. Miksi niin? Tänään SuperUser Q & A -postilla on vastauksia hämmentynyt lukijan kysymyksiin.

Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.

Kuva ystävällisesti Jean-Etienne Minh-Duy Poirrieristä (Flickr).

Kysymys

SuperUser-lukija sixtyfootersdude haluaa tietää, miksi zip pystyy pakkaamaan yksittäisiä tiedostoja paremmin kuin useat samantyyppisiä tiedostoja:

Oletetaan, että minulla on 10 000 XML-tiedostoa ja haluat lähettää ne kaverille. Ennen niiden lähettämistä haluaisin pakata ne.

Menetelmä 1: Älä tiivistä niitä

tulokset:

Tapa 2: Zip jokaisen tiedoston erikseen ja lähetä hänelle 10 000 zipped XML-tiedostoa

Komento:

tulokset:

Tapa 3: Luo yhdestä Zip-tiedostosta, joka sisältää kaikki 10 000 XML-tiedostoa

Komento:

tulokset:

Tapa 4: Tiedostojen yhdistäminen yhteen tiedostoon ja Zip It

Komento:

tulokset:

kysymykset

  • Miksi saan tällaisia ​​dramaattisesti parempia tuloksia, kun kirjoitan vain yhden tiedoston?
  • Odotin saavani huomattavasti parempia tuloksia käyttämällä menetelmää 3 pikemminkin kuin menetelmää 2, mutta en. Miksi tämä on?
  • Onko tämä käytäntö erityinen zip? Jos yritin käyttää Gzipiä, saisinko eri tuloksia?

Lisätiedot

Metatiedot

Yksi annetuista vastauksista viittaa siihen, että ero on zip-tiedostossa tallennettu järjestelmämetadata. En usko, että näin voi olla. Testaus tehtiin seuraavasti:

Tuloksena oleva zip-tiedosto on 1,4 MB. Tämä tarkoittaa, että vielä noin 10 megatavua tilaa on selvittämättä.

Miksi zip pystyy pakkaamaan yksittäisiä tiedostoja paremmin kuin samat tyyppiset sisällöt?

Vastaus

Vastauksemme ovat Alan Shutko ja Aganju. Ensin Alan Shutko:

Zip-pakkaus perustuu pakattavissa oleviin tietoihin toistuvista kuvioista, ja pakkaus paranee, kun kauemmin tiedosto on, koska yhä useampia ja pidempiä malleja löytyy ja käytetään.

Yksinkertaistetusti, jos pakkaat yhden tiedoston, sanakirja, joka kartoittaa (lyhyt) koodit (pidempiä) kuvioita, on väistämättä sisältynyt jokaiseen tuloksena olevaan zip-tiedostoon; jos vetääksesi yhden pitkän tiedoston, sanakirjaa käytetään uudelleen ja kasvaa tehokkaammin kaikessa sisällössä.

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

Seuraa Aganjun vastausta:

Zipissa jokainen tiedosto pakataan erikseen. Päinvastoin kiinteä pakkaus, eli tiedostot pakataan yhteen. 7-zip ja Rar käyttää oletusarvoisesti kiinteää pakkausta. Gzip ja Bzip2 eivät voi pakata useita tiedostoja, joten Tar käytetään ensin, jolla on sama vaikutus kuin kiinteä pakkaus.

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

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

Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.