Dosyalarımızı daha kolay paylaşacak ve / veya taşıyacak şekilde sıkıştırabilmemiz elektronik yaşamımızı daha kolay hale getirebilir, ancak bazen sıkıştırdıktan sonra tuhaf veya beklenmedik boyutlandırma sonuçları görebiliriz. Neden? Bugünün Süper Kullanıcısı Soru ve Cevap yazısında, karışık bir okuyucunun sorularının yanıtları bulunur.
Bugünün Soru ve Cevap oturumu bize, topluluk tarafından yönlendirilen bir soru-cevap web sitesi grubu olan Stack Exchange'in bir bölümü olan SuperUser'ın izniyle geliyor.
Jean-Etienne Minh-Duy Poirrier (Flickr) izniyle.
Soru
SuperUser okuyucu sixtyfootersdude, zip'in neden tek bir dosyayı aynı tür içeriğe sahip birden fazla dosyadan daha iyi sıkıştırabildiğini bilmek istiyor:
10.000 XML dosyasına sahip olduğumu ve 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ır mıyı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 bir dosyayı aynı tür içeriğe sahip birden fazla 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 verilerdeki yinelenen kalıpları temel alır ve daha uzun kalıplar bulunup kullanılabildiğinden, sıkıştırma işlemi 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 mutlaka sonuçta ortaya çıkan her 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ılması çok verimli olur ve sonuç daha küçük bir toplam zip dosyasıdır.
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ırmayani 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 yüzden önce katı sıkıştırma ile aynı etkiye sahip olan Tar kullanılır.
Xml dosyaları benzer yapıya (ve muhtemelen benzer içeriğe sahip) 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”
<eleman adı =”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, 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.