Kodėl „Zip“ gali suglaudinti atskirus failus geriau nei kelis failus su tuo pačiu turiniu?
Galėdami suspausti mūsų failus taip, kad juos būtų lengviau bendrinti ir (arba) transportuoti, mūsų elektroninis gyvenimas gali tapti daug paprastesnis, tačiau kartais mes suspausti juos matome nelyginius ar netikėtus dydžius. Kodėl taip? Šiandienos „SuperUser“ atsakymų ir atsakymų poste yra atsakymai į painius skaitytojo klausimus.
Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.
„Jean-Etienne Minh-Duy Poirrier“ (Flickr) nuotrauka.
Klausimas
„SuperUser“ skaitytojas sixtyfootersdude nori sužinoti, kodėl „zip“ gali suspausti atskirus failus geriau nei kelis failus, turinčius to paties tipo turinį:
Tarkime, kad turiu 10 000 XML failų ir noriu juos siųsti draugui. Prieš juos siunčiant, norėčiau juos suspausti.
1 metodas: nespauskite jų
Rezultatai:
2 metodas: kiekvieną failą užfiksuokite atskirai ir išsiųskite jam 10 000 užfiksuotų XML failų
Komanda:
Rezultatai:
3 metodas: sukurkite vieną ZIP failą, kuriame yra visi 10 000 XML failų
Komanda:
Rezultatai:
4 metodas: sujungti failus į vieną failą ir užfiksuokite jį
Komanda:
Rezultatai:
Klausimai
- Kodėl gaunu tokius gerokai geresnius rezultatus, kai aš tiesiog įrašau vieną failą?
- Tikėjausi, kad gausiu geresnių rezultatų naudojant 3 metodą, o ne 2 metodą, bet aš ne. Kodėl tai?
- Ar šis elgesys būdingas zip? Jei bandžiau naudoti „Gzip“, ar gautų skirtingus rezultatus?
Papildoma informacija
Meta duomenys
Vienas iš pateiktų atsakymų rodo, kad skirtumas yra sistemos metaduomenys, saugomi zip faile. Nemanau, kad taip gali būti. Norėdami išbandyti, atlikiau šiuos veiksmus:
Gautas zip failas yra 1,4 MB. Tai reiškia, kad vis dar yra apie dešimt MB nepaaiškinamo ploto.
Kodėl „zip“ gali suspausti atskirus failus geriau nei kelis tos pačios rūšies failus?
Atsakymas
„SuperUser“ dalyviai „Alan Shutko“ ir „Aganju“ turi atsakymą. Pirma, Alan Shutko:
„Zip“ suspaudimas grindžiamas pasikartojančiais duomenimis, kuriuos reikia suglaudinti, o glaudinimas tampa geresnis, tuo ilgiau failas yra, nes galima rasti ir naudoti daugiau ir ilgesnių modelių.
Supaprastinta, jei suspausite vieną failą, žodynas, kuriame (trumpi) kodai susiejami su (ilgesniais) modeliais, būtinai yra kiekviename gautame zip faile; jei siųsite vieną ilgą failą, žodynas yra „pakartotinai naudojamas“ ir auga dar veiksmingiau visame turinyje.
Jei jūsų failai yra šiek tiek panašūs (kaip visada yra tekstas), „žodyno“ pakartotinis naudojimas tampa labai efektyvus ir rezultatas yra daug mažesnis viso zip failo.
Po to atsako Aganju:
„Zip“ kiekvienas failas yra suspaustas atskirai. Priešingai kietas suspaudimas, ty failai yra suspausti kartu. 7-zip ir Rar pagal nutylėjimą naudoja kietą suspaudimą. „Gzip“ ir „Bzip2“ negali suspausti kelių failų, todėl „Tar“ naudojamas pirmiausia, turintis tą patį poveikį kaip ir kietasis suspaudimas.
Kadangi xml failai turi panašią struktūrą (ir turbūt panašų turinį), jei failai yra suspausti, tada suspaudimas bus didesnis.
Pavyzdžiui, jei faile yra eilutė „
„Ir kompresorius jau rado tą eilutę kitame faile, jis jį pakeis nedideliu rodikliu į ankstesnę rungtynę. Jei kompresorius nenaudoja kieto suspaudimo, pirmasis eilutės įvykis faile bus įrašomas kaip a pažodinis, kuris yra didesnis.
Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.