Mājas lapa » » Kāpēc Zip spēj saspiest atsevišķus failus labāk nekā vairāki faili ar to pašu saturu?

    Kāpēc Zip spēj saspiest atsevišķus failus labāk nekā vairāki faili ar to pašu saturu?

    Spēja saspiest mūsu failus, lai tos varētu vieglāk koplietot un / vai transportēt, var padarīt mūsu elektronisko dzīvi daudz vieglāku, bet dažreiz mēs varam redzēt nepāra vai negaidītus izmēru rezultātus pēc to saspiešanas. Kāpēc ir tā, ka? Šodienas SuperUser Q&A ziņojumam ir atbildes uz neskaidru lasītāju jautājumiem.

    Šodienas jautājumu un atbilžu sesija mums dod pieklājību no SuperUser-Stack Exchange apakšnodaļas, kas ir kopienas orientēta Q & A tīmekļa vietņu grupa.

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

    Jautājums

    SuperUser lasītājs sixtyfootersdude vēlas zināt, kāpēc zip spēj saspiest atsevišķus failus labāk nekā vairāki faili ar tādu pašu saturu:

    Pieņemsim, ka man ir 10 000 XML failu un vēlos tos nosūtīt draugam. Pirms nosūtīšanas es vēlētos tos saspiest.

    1. metode: nesaspiest tos

    Rezultāti:

    2. metode. Katra faila piesaistīšana atsevišķi un Sūtīt viņam 10000 Zip XML failus

    Komanda:

    Rezultāti:

    3. metode: izveidot vienotu ZIP failu, kas satur visus 10 000 XML failus

    Komanda:

    Rezultāti:

    4. metode: sasaistīt failus vienā failā un saspiest to

    Komanda:

    Rezultāti:

    Jautājumi

    • Kāpēc man ir tādi ievērojami labāki rezultāti, kad es tikai zipu vienu failu?
    • Es gaidīju, ka, izmantojot 3. metodi, nevis drīzāk 2. metodi, radīšu krasi labākus rezultātus, bet ne. Kāpēc ir šis?
    • Vai šī darbība ir raksturīga zip? Ja es mēģināju izmantot Gzip, vai man būtu dažādi rezultāti?

    Papildus informācija

    Meta dati

    Viena no atbildēm liecina, ka atšķirība ir sistēmas meta dati, kas tiek saglabāti zip failā. Es nedomāju, ka tas tā varētu būt. Lai to pārbaudītu, es izdarīju:

    Iegūtais zip fails ir 1,4 MB. Tas nozīmē, ka joprojām ir aptuveni desmit MB neizskaidrojamu telpu.

    Kāpēc zip spēj saspiest atsevišķus failus labāk nekā vairākus failus ar tādu pašu saturu?

    Atbilde

    SuperUser ziedotājiem Alan Shutko un Aganju ir atbilde. Pirmkārt, Alans Šutko:

    Zip saspiešana ir balstīta uz atkārtojamiem datiem saspiestajos datos, un saspiešana uzlabojas, jo ilgāk fails ir, jo var atrast un izmantot vairāk un ilgākus modeļus.

    Vienkāršots, ja saspiežat vienu failu, vārdnīca, kas kartē (īsus) kodus uz (garākiem) modeļiem, vienmēr ir iekļauta katrā iegūtajā zip failā; ja izvelkat vienu garu failu, vārdnīca tiek “atkārtoti izmantota” un palielinās vēl efektīvāka visā saturā.

    Ja jūsu faili ir pat līdzīgi (kā teksts vienmēr ir), „vārdnīcas” atkārtota izmantošana kļūst ļoti efektīva, un rezultāts ir daudz mazāks kopējais zip fails.

    Seko atbilde no Aganju:

    Zipā katrs fails tiek saspiests atsevišķi. Pretējais ir cietā kompresija, tas ir, faili tiek saspiesti kopā. 7-zip un Rar pēc noklusējuma izmanto cieto kompresiju. Gzip un Bzip2 nevar saspiest vairākus failus, tāpēc vispirms tiek izmantots darva, kam ir tāda pati ietekme kā cietajai kompresijai.

    Tā kā xml failiem ir līdzīga struktūra (un, iespējams, līdzīgs saturs), tad, ja faili ir saspiesti kopā, tad saspiešana būs lielāka.

    Piemēram, ja failā ir virkne “"Un kompresors jau ir atradis šo virkni citā failā, tas aizstās to ar nelielu rādītāju uz iepriekšējo spēli. Ja kompresors neizmanto cieto kompresiju, pirmā virknes virkne failā tiks ierakstīta kā a burtiski, kas ir lielāks.


    Vai kaut kas jāpievieno paskaidrojumam? Skaņas izslēgšana komentāros. Vai vēlaties lasīt vairāk atbildes no citiem tehnoloģiju gudriem Stack Exchange lietotājiem? Apskatiet pilnu diskusiju pavedienu šeit.