Spēja saspiest mūsu failus, lai tos būtu vieglāk koplietot un / vai transportēt, var padarīt mūsu elektronisko dzīvi daudz vieglāku, taču dažkārt mēs varam saskatīt nepāra vai negaidītus lieluma rezultātus pēc to saspiešanas. Kāpēc ir tā, ka? Šodienas SuperUser Q & A ziņā ir atbildes uz sajaukt lasītāja jautājumiem.
Šodienas jautājumu un atbilžu sesija mums priecājas par SuperUser - Stack Exchange dalību, kas ir kopienas vadīta Q & A tīmekļa vietņu grupa.
Foto pieklājīgi no Jean-Etienne Minh-Duy Poirrier (Flickr).
SuperUser lasītājs sixtyfootersdude vēlas uzzināt, kāpēc zip spēj saspiest atsevišķus failus labāk nekā vairākus failus ar tāda paša veida saturu:
Pieņemsim, ka man ir 10 000 XML failu un vēlaties tos nosūtīt draugam. Pirms to nosūtīšanas es gribētu saspiest tos.
1. metode: nespiediet tos
Rezultāti:
2. metode: katru failu atsevišķi nospiediet un nosūtiet 10000 ZIP failu
Komanda:
Rezultāti:
3. metode: izveidojiet vienotu Zip failu, kurā ir visi 10000 XML faili
Komanda:
Rezultāti:
4. metode: apvienojiet failus vienā failā un izveidojiet to
Komanda:
Rezultāti:
Jautājumi
- Kāpēc iegūt šādus dramatiski labākus rezultātus, kad es vienkārši ielicu vienu failu?
- Es gaidījos iegūt diezgan labākus rezultātus, izmantojot 3. metodi, nevis 2. metodi, bet man tas nav. Kāpēc ir šis?
- Vai šī uzvedība ir īpaši zip? Ja es mēģināju lietot Gzip, vai es iegūtu dažādus rezultātus?
Papildus informācija
Meta dati
Viena no sniegtajām atbildēm liecina, ka atšķirība ir sistēmas metadati, kas tiek saglabāti zip fails. Es nedomāju, ka tas tā varētu būt. Lai to pārbaudītu, es veicu sekojošo:
Iegūtais zip fails ir 1,4 MB. Tas nozīmē, ka joprojām ir apmēram desmit MB neskaidras vietas.
Kāpēc zip spēj saspiest atsevišķus failus labāk nekā vairāki faili ar tāda paša veida saturu?
SuperUser atbalstītāji Alan Shutko un Aganju ir atbilde mums. Pirmkārt, Alan Shutko:
Zip saspiešana balstās uz saspiešanas datu atkārtojošajiem modeļiem, un kompresija kļūst labāk, jo ilgāks ir fails, jo var atrast un izmantot vairāk un ilgākus modeļus.
Vienkāršots, ja jūs saspiežat vienu failu, vārdnīca, kas kartē (īsus) kodus (ilgākos) modeļus, obligāti ietver katrā iegūtajā ZIP failā; ja jūs ielīmējat vienu garu failu, vārdnīca tiek "atkārtoti izmantota" un arvien efektīvāka visā saturā.
Ja jūsu faili ir pat nedaudz līdzīgi (jo 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 Aganju atbilde:
Pasta indeksā katrs fails tiek saspiests atsevišķi. Pretēji ir cieta 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 tarts, kam ir tāds pats efekts kā cietā kompresijai.
Tā kā xml failiem ir līdzīga struktūra (un, iespējams, līdzīgs saturs), ja faili tiek saspiesti kopā, tad saspiešana būs lielāka.
Piemēram, ja fails satur virkni "
"Un kompresors jau ir atradis šo virkni citā failā, tas to aizstās ar nelielu rādītāju uz iepriekšējo spēli. Ja kompresors neizmanto cieto kompresiju, pirmais faila virknes ieraksts tiks ierakstīts kā burtiski, kas ir lielāks.
Vai kaut ko pievienot paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem? Šeit skatiet pilnu diskusiju pavedienu.