Neden Zip, Tek İçeriği Aynı İçeriğe Sahip Birden Çok Dosyadan Daha İyi Sıkıştırır?
Dosyalarımızı daha kolay paylaşacak ve / veya taşıyacak şekilde sıkıştırabilmek, elektronik hayatımızı daha kolay hale getirebilir, ancak bazen sıkıştırdıktan sonra garip veya beklenmedik boyutlandırma sonuçları görebiliriz. Neden? Bugünün Süper Kullanıcı Soru-Cevap yazısının kafasında karışık bir okuyucunun soruları var..
Bugünün Soru ve Cevap oturumu bize topluluk tarafından yönlendirilen bir soru-cevap web sitesi grubu olan Stack Exchange'in bir alt birimi olan SuperUser'ın izniyle geliyor..
Jean-Etienne Minh-Duy Poirrier (Flickr) izniyle.
Soru
SuperUser okuyucu sixtyfootersdude, zip'in neden aynı tür içeriğe sahip tekli dosyaları birden fazla dosyadan daha iyi sıkıştırabildiğini bilmek istiyor:
10.000 XML dosyam olduğunu ve bunları bir arkadaşıma göndermek istediğimi varsayalım. Göndermeden önce onları sıkıştırmak istiyorum..
Yöntem 1: Sıkıştırmayın
Sonuçlar:
Yöntem 2: Her dosyayı ayrı ayrı sıkıştır ve ona 10,000 sıkıştırılmış XML dosyası gönder
Komut:
Sonuçlar:
Yöntem 3: tüm 10.000 XML dosyalarını içeren tek bir zip dosyası oluşturun.
Komut:
Sonuçlar:
Yöntem 4: Dosyaları tek bir dosyada birleştir ve sıkıştır
Komut:
Sonuçlar:
Sorular
- Tek bir dosyayı sıkıştırırken neden bu kadar önemli sonuçlar elde ediyorum??
- Yöntem 2 yerine yöntem 3'ü kullanarak daha iyi sonuçlar elde etmeyi bekliyordum, ama istemiyorum. Bu neden?
- Bu davranış zip'e özgü mü? Gzip'i kullanmayı denersem, farklı sonuçlar alırdım?
İlave bilgi
Meta Veri
Verilen cevaplardan biri farkın zip dosyasında depolanan sistem meta verileri olduğunu göstermektedir. Bunun olabileceğine inanmıyorum. Test etmek için aşağıdakileri yaptım:
Ortaya çıkan zip dosyası 1.4 MB'dir. Bu, hala yaklaşık on MB açıklanamayan alan olduğu anlamına gelir.
Zip neden tek tek dosyaları aynı tür içeriğe sahip birden çok dosyadan daha iyi sıkıştırabilir??
Cevap
Süper Kullanıcı katkıları Alan Shutko ve Aganju bize cevap verdi. İlk olarak, Alan Shutko:
Sıkıştırma sıkıştırması, sıkıştırılacak verideki tekrarlayan kalıplara dayanır ve daha uzun kalıplar bulunup kullanılabildiğinden, sıkıştırma, dosya ne kadar uzun olursa o kadar iyi olur..
Basitleştirilmiş, bir dosyayı sıkıştırırsanız, (kısa) kodları (daha uzun) kalıplarla eşleştiren sözlüğün her bir sonuçta elde edilen zip dosyasında bulunması gerekir; Uzun bir dosyayı sıkıştırırsanız, sözlük 'yeniden kullanılır' ve tüm içeriklerde daha etkili bir şekilde büyür.
Dosyalarınız biraz benzerse (her zaman olduğu gibi), 'sözlüğün' tekrar kullanımı çok verimli olur ve sonuç daha küçük bir toplam zip dosyası olur.
Aganju'nun cevabını takip etti:
Zip dosyasında her dosya ayrı ayrı sıkıştırılır. Tam tersi katı sıkıştırma, yani dosyalar birlikte sıkıştırılır. 7-zip ve Rar varsayılan olarak katı sıkıştırma kullanır. Gzip ve Bzip2 birden fazla dosyayı sıkıştıramaz, bu nedenle ilk önce Tar kullanılır, katı sıkıştırma ile aynı etkiye sahiptir.
Xml dosyaları benzer yapıya (ve muhtemelen benzer içeriğe sahip olduğundan) dosyalar birlikte sıkıştırılırsa sıkıştırma daha yüksek olur..
Örneğin, bir dosya “dizesini içeriyorsa”
”Ve kompresör zaten bu dizgiyi başka bir dosyada buldu, önceki eşleşmede küçük bir göstericiyle değiştirecek. Kompresör katı sıkıştırma kullanmıyorsa, dosyada dizenin ilk oluşumu bir kelimesi kelimesine, hangisi daha büyük.
Açıklamaya eklemek için bir şey var mı? Yorumlarda ses kesiliyor. Diğer teknoloji meraklısı Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Burada tüm tartışma konusuna göz atın.