Úvodná » ako » Prečo je Zip schopný skomprimovať jednotlivé súbory lepšie ako viaceré súbory s rovnakým obsahom?

    Prečo je Zip schopný skomprimovať jednotlivé súbory lepšie ako viaceré súbory s rovnakým obsahom?

    Byť schopný komprimovať naše súbory, aby ich bolo ľahšie zdieľať a / alebo prenášať, môže urobiť náš elektronický život oveľa jednoduchšie, ale niekedy môžeme po stlačení ich výsledkov vidieť divné alebo neočakávané výsledky. Prečo to je? Dnešný príspevok SuperUser Q & A má odpovede na otázky zmytej čitateľa.

    Dnešná relácia otázok a odpovedí sa k nám pridelí zdvorilosťou SuperUser - podskupiny Stack Exchange, zoskupenia webových stránok typu Q & A.

    Foto s láskavým dovolením Jean-Etienne Minh-Duy Poirrier (Flickr).

    Otázka

    Čítačka SuperUser šesťdesiatpriestor chce vedieť, prečo je zip schopný komprimovať jednotlivé súbory lepšie ako viac súborov s rovnakým typom obsahu:

    Predpokladajme, že mám 10 000 súborov XML a chcete ich poslať priateľovi. Pred odoslaním by som ich chcel komprimovať.

    Metóda 1: Nekomprimujte ich

    výsledky:

    Metóda 2: Zaznamenajte každý súbor samostatne a pošlite mu 10 000 súborov XML so zipsom

    Command:

    výsledky:

    Metóda 3: Vytvorenie jedného súboru ZIP obsahujúceho všetky 10.000 súbory XML

    Command:

    výsledky:

    Metóda 4: Zreteľte súbory do jedného súboru a zipsujte to

    Command:

    výsledky:

    otázky

    • Prečo môžem získať také dramaticky lepšie výsledky, keď len zipsom jediný súbor?
    • Očakával som, že dostanem drasticky lepšie výsledky pomocou metódy 3 namiesto metódy 2, ale nemám. Prečo je toto?
    • Je toto správanie špecifické pre zips? Ak som sa pokúsil použiť Gzip, získal by som rôzne výsledky?

    Dodatočné informácie

    Meta dáta

    Jedna z odpovedí naznačuje, že rozdiel je systémové meta dáta, ktoré sú uložené v súbore zip. Neverím, že to môže byť tak. Aby som to otestoval, urobil som nasledovné:

    Výsledný súbor zip je 1,4 MB. Znamená to, že stále je približne desať MB nevysvetliteľného priestoru.

    Prečo je zip schopný komprimovať jednotlivé súbory lepšie ako viac súborov s rovnakým typom obsahu?

    Odpoveď

    Sponzori SuperUser Alan Shutko a Aganju majú odpoveď pre nás. Po prvé, Alan Shutko:

    Zipová kompresia je založená na opakujúcich sa vzorkách v údajoch, ktoré sa majú komprimovať a kompresiu sa stáva lepšia, čím dlhší je súbor, keďže sa dajú nájsť a používať viac a dlhšie vzory.

    Zjednodušené, ak komprimujete jeden súbor, slovník, ktorý mapuje (krátke) kódy na (dlhšie) vzory, je nevyhnutne obsiahnutý v každom výslednom zipovom súbore; ak zips jeden dlhý súbor, slovník sa 'opätovne používa' a ešte viac efektívny v celom obsahu.

    Ak sú vaše súbory dokonca trochu podobné (ako vždy je text), opätovné použitie "slovníka" sa stáva veľmi efektívnym a výsledkom je oveľa menší súbor s celkovým zipsom.

    Nasledovala odpoveď od Aganju:

    V zip sú každý súbor komprimovaný samostatne. Opačný je pevná kompresia, to znamená, že súbory sú komprimované spolu. 7-zip a Rar používajú pevnú kompresiu štandardne. Gzip a Bzip2 nemôžu komprimovať viac súborov, takže sa najskôr používa Tar, ktorý má rovnaký efekt ako pevná kompresia.

    Keďže súbory xml majú podobnú štruktúru (a pravdepodobne podobný obsah), ak sú súbory komprimované, kompresia bude vyššia.

    Napríklad, ak súbor obsahuje reťazec ""A kompresor už našiel reťazec v inom súbore, nahradí ho malým ukazovateľom na predchádzajúci zápas. Ak kompresor nepoužíva pevnú kompresiu, prvý výskyt reťazca v súbore bude zaznamenaný ako a doslovný, čo je väčšie.


    Máte niečo doplniť vysvetlenie? Znie to v komentároch. Chcete sa dozvedieť viac odpovedí od iných používateľov technickej úrovne Stack Exchange? Pozrite sa na celý diskusný príspevok tu.