Zlib, gzip ve zip nasıl ilişkilidir? Ortak noktaları nelerdir ve nasıl farklıdırlar?


948

Zlib'de kullanılan sıkıştırma algoritması temelde gzip ve zip ile aynıdır . Nelerdir gzip ve zip ? Nasıl farklılar ve nasıl aynılar?

Yanıtlar:


2476

Kısa form:

.zipSıkıştırmayı azalt yöntemini kullanan bir arşiv biçimidir . .gzGzip formatında da Deflate sıkıştırma yöntemini kullanarak, tek dosyalar içindir. Genellikle gzip ile birlikte kullanıldığında bir sıkıştırılmış arşiv biçimi yapmak katran , .tar.gz. Zlib kütüphanesi Deflate sıkıştırma ve açma zip, gzip tarafından kullanılması için kodu sağlar PNG (kullanan zlib sarıcı söndürmek verilere), ve bir çok diğer uygulamalar.

Uzun biçim:

ZIP biçimi onun uygulanması, PKZIP, shareware bir açık şartname ile açık biçimi olarak Phil Katz tarafından geliştirilmiştir. Her bir dosyanın ayrı ayrı sıkıştırıldığı dosyaları ve dizin yapılarını depolayan bir arşiv biçimidir. Dosya türü .zip. Dosyalar ve dizin yapısı isteğe bağlı olarak şifrelenebilir.

ZIP biçimi çeşitli sıkıştırma yöntemlerini destekler:

0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1

Yöntem 1 ila 7 tarihseldir ve kullanımda değildir. Yöntem 9 ila 98 nispeten yeni ilavelerdir ve çeşitli küçük miktarlarda kullanılır. ZIP biçiminde gerçekten yaygın kullanımdaki tek yöntem, yöntem 8, Deflate ve daha küçük ölçüde bir yöntemdir, bu da hiç sıkıştırma değildir. .zipVahşi doğada karşılaşacağınız her dosya, yalnızca yöntem 8 ve 0'ı, muhtemelen sadece yöntem 8'i kullanacaktır. (Yöntem 8'de ayrıca verileri sıkıştırma ve nispeten az genişleme olmadan etkili bir şekilde saklamak için bir araç vardır ve Yöntem 0 akış olarak kullanılamaz. oysa Yöntem 8 olabilir.)

ISO / IEC 21320-1: Dosya konteynerler için 2015 standardı böyle Java arşiv kullanılan dosyaları (.jar) gibi kısıtlı bir fermuar biçimidir, Office Açık XML dosyaları (Microsoft Office, .xlsx, .pptx .docx), Office Belge Dosyaları (.odt, .ods, .odp) ve EPUB dosyalarını (.epub) biçimlendirin. Bu standart, sıkıştırma yöntemlerini 0 ve 8 ile ve şifreleme veya imza yok gibi diğer kısıtlamalar ile sınırlar.

1990'larda Info-ZIP grubu , Deflate formatıyla sıkıştırmayı ve bunun ve önceki formatların dekompresyonunu destekleyen taşınabilir, ücretsiz, açık kaynak uygulamaları zipve unzipyardımcı programları yazdı . Bu, .zipbiçimin kullanımını büyük ölçüde genişletti .

90'lı yılların başlarında, gzip biçimi , Bilgi-ZIP yardımcı programlarındaki Deflate kodundan türetilen Unix compressyardımcı programının yerine kullanılmak üzere geliştirildi . Unix compress, .Zdosya adına bir ekleyerek tek bir dosyayı veya akışı sıkıştırmak için tasarlanmıştır . compresskullanan LZW sıkıştırma algoritması anda patent altında ve serbest kullanım patent sahibi tarafından ihtilaf halinde. Bazı Deflate uygulamaları Phil Katz tarafından patentlenmiş olsa da, format değildi ve bu nedenle herhangi bir patenti ihlal etmeyen bir Deflate uygulaması yazmak mümkün oldu. Bu uygulamaya son 20 yıldan fazla bir süredir meydan okunmadı. Unix gzipyardımcı programı,compressve aslında sıkıştırılmış compressverileri açabilirsiniz (bu cümleyi ayrıştırabildiğinizi varsayarak). dosya adına gzipa ekler .gz. gzipUnix'ten biraz daha iyi sıkışan sıkıştırılmış veri formatını kullanır compress, çok hızlı bir dekompresyona sahiptir ve veriler için bir bütünlük kontrolü olarak bir CRC-32 ekler. Üstbilgi biçimi compress, orijinal dosya adı ve dosya değiştirme süresi gibi izin verilen biçimden daha fazla bilginin depolanmasına da izin verir .

compressYalnızca tek bir dosyayı sıkıştırmasına rağmen , taryardımcı programı bir dosya arşivi, öznitelikleri ve dizin yapılarını tek bir .tardosyaya oluşturmak ve daha sonra compressbir .tar.Zdosya oluşturmak için sıkıştırmak yaygındı . Aslında taryarar vardı ve hala yerine borusuna çıktısını sahip, aynı zamanda sıkıştırma yapmak için bir seçenek vardır tariçin compress. Tüm bunlar gzip formatına taşındı ve tardoğrudan .tar.gzformata sıkıştırma seçeneğine sahip . tar.gzBiçimi daha iyi sıkıştıran .zipbir sıkıştırma beri yaklaşımı .tar, dosyalar arasında özellikle çok sayıda küçük dosya yedekleme yararlanabilir. .tar.gzçok yüksek taşınabilirliği nedeniyle Unix'te kullanılan en yaygın arşiv biçimidir, ancak kullanımda daha etkili sıkıştırma yöntemleri de vardır, bu nedenle sık sık görür .tar.bz2ve .tar.xzarşivlersiniz.

Aksine .tar, .zipsonunda bir içerik listesi sağlayan merkezi bir dizin vardır. Bu ve ayrı sıkıştırma, bir .zipdosyadaki tek tek girdilere rastgele erişim sağlar . Bir .tardizin oluşturmak için .tardosyanın başından sonuna kadar açılması ve taranması gerekir .

Gzip'in piyasaya sürülmesinden kısa bir süre sonra, 1990'ların ortalarında, aynı patent anlaşmazlığı .gif, bülten panolarında ve World Wide Web'de (o zamanlar yeni bir şey) yaygın olarak kullanılan görüntü formatının ücretsiz kullanımını sorguladı . Dosya türüyle PNG kayıpsız sıkıştırılmış resim biçimi yarattı küçük bir grup Yani .pngyerine, .gif. Bu biçim, görüntü verisindeki filtrelerin fazlalık göstermesinden sonra uygulanan sıkıştırma için Söndürme biçimini de kullanır. PNG formatının yaygın kullanımını desteklemek için iki serbest kod kütüphanesi oluşturuldu. libpng ve zlib. libpng, PNG formatının tüm özelliklerini ele aldı ve zlib, libpng ve diğer uygulamalar için sıkıştırma ve açma kodunu sağladı. zlib gzipkoddan uyarlandı .

Sözü edilen tüm patentlerin süresi sona ermiştir.

Zlib kütüphanesi Deflate sıkıştırmasını ve dekompresyonunu ve deflate akışlarının etrafına üç çeşit sarmayı destekler. Bunlar: hiçbir sarma yok ("ham" deflate), PNG formatı veri bloklarında kullanılan zlib sarma ve programcıya gzip rutinleri sağlamak için gzip sarma. Zlib ve gzip sarma arasındaki temel fark, zlib sargının daha kompakt olması, gzip için en az 18 bayta karşılık altı bayt ve bütünlük denetimi Adler-32'nin gzip'in kullandığı CRC-32'den daha hızlı çalışmasıdır. Ham deflate, .zipsıkıştırılmış verileri deflate etrafına saran başka bir format olan formatı okuyan ve yazan programlar tarafından kullanılır .

zlib artık veri aktarımı ve depolaması için geniş kullanım alanına sahiptir. Örneğin, sunucular ve tarayıcılar tarafından yapılan HTTP işlemlerinin çoğu, verileri zlib kullanarak sıkıştırır ve açar, özellikle HTTP üstbilgisi , zlib veri biçiminin içine sarılmış sıkıştırma yönteminiContent-Encoding: deflate ifade eder .

Farklı deflate uygulamaları, CPU zamanı için sıkıştırma etkinliğinin alım satımına izin veren seçilebilir sıkıştırma seviyelerinin varlığı ile kanıtlandığı gibi, aynı giriş verileri için farklı sıkıştırılmış çıktılarla sonuçlanabilir. zlib ve PKZIP, deflate sıkıştırma ve dekompresyonun tek uygulamaları değildir. Hem 7-Zip arşivleme yardımcı programı hem de Google zopfli kütüphanesi , deflate formatını kullanırken mümkün olan son birkaç biti sıkıştırmak için sıkıştırılmış boyutları zlib'in en yüksek oranına göre yüzde birkaç oranında azaltmak için zlib'den çok daha fazla CPU zamanı kullanma yeteneğine sahiptir. sıkıştırma düzeyi. pigz yarargzip'in paralel bir uygulaması, zlib (sıkıştırma düzeyleri 1-9) veya zopfli (sıkıştırma seviyesi 11) kullanma seçeneğini içerir ve büyük dosyaların sıkıştırılmasını birden çok işlemci ve çekirdek üzerine bölerek zopfli kullanmanın zaman etkisini biraz azaltır.


113
Bu gönderi o kadar çok geçmiş ve bilgi ile doludur ki, insanlar bu gönderiyi bir bilgi kaynağı olarak referans göstermeye çalışmak durumunda bazı alıntıların eklenmesi gerektiğini hissediyorum. Bu bilgiler Wikipedia gibi alıntılarla bir yere yansıtılsa da, bu tür atıfta bulunulan eserlere bir bağlantı takdir edilecektir.
ThorSummoner

1348
Tüm bunların bir parçası olan referansım. Bu yazı Wikipedia'da orijinal bir kaynak olarak gösterilebilir.
Mark Adler

524
Bilginize: Mark Adler Amerikalı bir yazılım mühendisidir ve uzay araştırmalarına yoğun bir şekilde dahil olmuştur. En iyi Adler-32 sağlama toplamı işlevinin yazarı ve zlib sıkıştırma kitaplığı ve gzip'in ortak yazarı olarak veri sıkıştırma alanındaki çalışmaları ile bilinir. Info-ZIP'e katkıda bulundu ve Taşınabilir Ağ Grafikleri (PNG) görüntü formatının geliştirilmesine katıldı. Adler aynı zamanda Mars Keşif Gezgini misyonu için Spirit Cruise Mission Manager'dı. (wikipedia)
Isaac Hanson

99
gzip, Unix sıkıştırmasının yerini almak için oluşturuldu. zip, birkaç nedenden dolayı Unix'teki tar + gzip'ten üstün değildir . ( .tar.gzDosyaları gördüğünüzde , bunlar budur.) İlk olarak, tar + gzip zip'ten daha iyi sıkıştırır, çünkü bir sonraki dosyanın sıkıştırılması önceki dosyadaki geçmişi kullanabilir (bazen "katı" arşiv olarak da adlandırılır). zip sadece dosyaları tek tek sıkıştırabilir. İkincisi, tar tüm Unix dizin bilgilerini korur, ancak zip bunu yapmak için tasarlanmamıştır. (Unix'e özgü ekstra bloklarla zip formatının daha sonraki uzantıları bu sorunu çözmeye çalışır.)
Mark Adler

85
Biçimleri uygulama ile karıştırıyorsunuz. Deflate formatının 7-Zip uygulaması , aynı deflate formatı ile gzip'ten (% çok daha fazla CPU zamanı alırken) alıntı yaptığınız% 2 ila% 10 daha iyi sıkıştırma gibi bir şey elde edebilir. 7z LZMA2 formatı % 40 daha iyi sıkıştırma sunar.
Mark Adler

43

ZIP , rasgele sayıda dosya ve klasörü kayıpsız sıkıştırma ile birlikte depolamak için kullanılan bir dosya biçimidir. Kullanılan sıkıştırma yöntemleri hakkında kesin bir varsayımda bulunmaz , ancak en sık DEFLATE ile kullanılır .

Gzip hem DEFLATE tabanlı bir sıkıştırma algoritmasıdır hem de potansiyel patentlerle birlikte daha az engellenmiştir ve tek bir sıkıştırılmış dosyayı depolamak için bir dosya biçimidir. Tar ile birleştirildiğinde rastgele sayıda dosya ve klasörü sıkıştırmayı destekler . Sonuçta ortaya çıkan dosya .tgzveya uzantısına sahiptir .tar.gzve genellikle tarball olarak adlandırılır .

zlib , en yaygın LZ77 enkarnasyonunda DEFLATE'i kapsülleyen bir fonksiyon kütüphanesidir .


28

En önemli fark, gzip'in tek bir dosyayı sıkıştırabilmesidir, zip ise birden çok dosyayı tek tek sıkıştırır ve daha sonra tek bir dosyaya arşivler. Böylece, gzip çoğu zaman katranla birlikte gelir (yine de başka olasılıklar vardır). Bu, bazı (dis) avantajlarla birlikte gelir.

Büyük bir arşiviniz varsa ve bunun dışında tek bir dosyaya ihtiyacınız varsa, bu dosyaya ulaşmak için tüm gzip dosyasını açmanız gerekir. Bir zip dosyanız varsa bu gerekli değildir.

Öte yandan, 10 benzer veya hatta aynı dosyayı sıkıştırırsanız, zip arşivi çok daha büyük olacaktır, çünkü her dosya ayrı ayrı sıkıştırılır, oysa gzip'te tar ile birlikte tek bir dosya sıkıştırılır, bu da dosyalar benzer (eşit).


8
Bu noktayı abartıyorsunuz. İnsanlar rasgele erişimli sıkıştırılmış arşivler isteseler, ".tar.gz" dosyaları yerine ".gz.tar" dosyaları oluşturabilirler. Yapmazlar, çünkü çoğu insan rastgele erişim ile ilgilenmez. .Warc.gz web arşivleme biçimi çevresinde büyük bir topluluk vardır ve rastgele erişime ihtiyaç duyarlar, böylece her web sayfasını ayrı ayrı sıkıştırırlar. Bu formatı, İnternet Arşivi Wayback Makinesindeki bir web sayfasına her baktığınızda kullanırsınız.
Greg Lindahl

2
".gz.tar", tar biçimi girişlerine rastgele erişemediğinden rastgele erişim sunmaz. Belirli bir girdinin daha da kötüye gitmesini sağlamak için en baştan tüm girişleri gözden geçirmeniz gerekir: daha da kötüsü: sonuna kadar tüm girişleri geçmeniz gerekir, çünkü aynı dosya birkaç yerde (birkaç versiyonda) birkaç yerde arşivlenebilir aynı arşivde - ve tüm arşiv girişini giriş yoluyla okumak dışında bunu anlamanın bir yolu yoktur.
Min-Soo Pipefeet
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.