Hjemmeside » hvordan » Hvorfor kan Zip Able komprimere enkeltfiler bedre end flere filer med samme indhold?

    Hvorfor kan Zip Able komprimere enkeltfiler bedre end flere filer med samme indhold?

    At komprimere vores filer, så det er lettere at dele og / eller transportere dem, kan gøre vores elektroniske liv meget nemmere, men nogle gange kan vi se ulige eller uventede størrelsesresultater, efter at vi har komprimeret dem. Hvorfor det? Dagens SuperUser Q & A-indlæg har svarene på en forvirret læsers spørgsmål.

    Dagens Spørgsmål & Svar session kommer til os med venlig hilsen af ​​SuperUser-en underafdeling af Stack Exchange, en community-driven gruppe af Q & A-websteder.

    Foto med tilladelse til Jean-Etienne Minh-Duy Poirrier (Flickr).

    Spørgsmålet

    SuperUser læser sixtyfootersdude ønsker at vide, hvorfor zip er i stand til at komprimere enkeltfiler bedre end flere filer med samme type indhold:

    Antag at jeg har 10.000 XML-filer og vil sende dem til en ven. Før jeg sender dem, vil jeg gerne komprimere dem.

    Metode 1: Komprimer dem ikke

    Resultater:

    Metode 2: Zip hver fil separat og send ham 10.000 zip-XML-filer

    Kommando:

    Resultater:

    Metode 3: Opret en enkelt zip-fil, der indeholder alle 10.000 XML-filer

    Kommando:

    Resultater:

    Metode 4: Sammenkoble filerne til en enkelt fil og zip den

    Kommando:

    Resultater:

    spørgsmål

    • Hvorfor får jeg så dramatisk bedre resultater, når jeg bare zipper en enkelt fil?
    • Jeg forventede at få drastisk bedre resultater ved hjælp af metode 3 i stedet for metode 2, men det gør jeg ikke. Hvorfor er det?
    • Er denne adfærd specifik for zip? Hvis jeg forsøgte at bruge Gzip, ville jeg få forskellige resultater?

    Yderligere information

    Meta Data

    En af de givne svar antyder, at forskellen er systemmeta-data, der er gemt i zip-filen. Jeg tror ikke på, at dette kan være tilfældet. For at teste det gjorde jeg følgende:

    Den resulterende zip-fil er 1,4 MB. Det betyder, at der stadig er ca. ti MB uforklarligt plads.

    Hvorfor er zip i stand til at komprimere enkeltfiler bedre end flere filer med samme type indhold?

    Svaret

    SuperUser bidragsydere Alan Shutko og Aganju har svaret for os. Først op, Alan Shutko:

    Zip-komprimering er baseret på gentagne mønstre i de data, der skal komprimeres, og komprimeringen bliver bedre jo længere filen er, da flere og længere mønstre kan findes og bruges.

    Forenklet, hvis du komprimerer en fil, er ordbogen, der kortlægger (korte) koder til (længere) mønstre, nødvendigvis indeholdt i hver resulterende zip-fil; hvis du zip en lang fil, er ordbogen 'genbrugt' og vokser endnu mere effektivt på tværs af alt indhold.

    Hvis dine filer er lige lidt lignende (som tekst altid er), bliver genbrug af 'ordbogen' meget effektiv, og resultatet er en meget mindre total zip-fil.

    Efterfulgt af svaret fra Aganju:

    I zip er hver fil komprimeret separat. Det modsatte er fast kompression, det vil sige, at filer komprimeres sammen. 7-zip og Rar bruger som standard komprimering som standard. Gzip og Bzip2 kan ikke komprimere flere filer, så Tar bruges først, og har samme effekt som solid kompression.

    Da xml-filer har lignende struktur (og sandsynligvis lignende indhold), hvis filerne komprimeres sammen, bliver komprimeringen højere.

    For eksempel, hvis en fil indeholder strengen ""Og kompressoren har allerede fundet den streng i en anden fil, vil den erstatte den med en lille peger til den foregående kamp. Hvis kompressoren ikke bruger solid kompression, registreres den første forekomst af strengen i filen som en bogstavelig, som er større.


    Har du noget at tilføje til forklaringen? Lyde af i kommentarerne. Vil du læse flere svar fra andre tech-savvy Stack Exchange brugere? Tjek den fulde diskussionstråd her.