zlib'de kullanılan sıkıştırma algoritması temelde gzip ve zip'tekiyle aynıdır. gzip ve zip nedir? Nasıl farklıdırlar ve nasıl aynıdırlar?
Kısa form:
.zip
, genellikle [Deflate sıkıştırma yöntemini][2] kullanan bir arşiv formatıdır. .gzgzip biçimi][3] tek dosyalar içindir ve yine Deflate sıkıştırma yöntemini kullanır. Genellikle gzip [tar ile birlikte kullanılarak sıkıştırılmış bir arşiv biçimi][4],
.tar.gzoluşturulur. zlib kütüphanesi][5] zip, gzip, [png][6] ([deflate verileri üzerinde [zlib wrapper][7] kullanır) ve diğer birçok uygulama tarafından kullanılmak üzere Deflate sıkıştırma ve açma kodu sağlar. Uzun form:_ ZIP formatı][1] Phil Katz tarafından açık bir spesifikasyona sahip açık bir format olarak geliştirildi ve uygulaması olan PKZIP paylaşılan yazılımdı. Her dosyanın ayrı ayrı sıkıştırıldığı dosyaları ve bunların dizin yapısını depolayan bir arşiv biçimidir. Dosya türü
.zip`tir. Dosyaların yanı sıra dizin yapısı da isteğe bağlı olarak şifrelenebilir.
ZIP formatı ç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
1'den 7'ye kadar olan yöntemler tarihseldir ve kullanımda değildir. 9'dan 98'e kadar olan yöntemler nispeten yeni eklemelerdir ve değişen, az miktarda kullanımdadır. ZIP formatında gerçekten yaygın olarak kullanılan tek yöntem yöntem 8, Deflate ve daha küçük bir ölçüde hiç sıkıştırma yapmayan yöntem 0'dır. Vahşi doğada karşılaşacağınız hemen hemen her .zip
dosyası yalnızca 8 ve 0 yöntemlerini, muhtemelen yalnızca 8 yöntemini kullanacaktır. (Yöntem 8 ayrıca sıkıştırma olmadan ve nispeten az genişletme ile verileri etkili bir şekilde depolamak için bir araca sahiptir ve Yöntem 8 akıtılabilirken Yöntem 0 akıtılamaz).
Dosya kapsayıcıları için ISO/IEC 21320-1:2015 standardı Java arşiv dosyalarında (.jar), Office Open XML dosyalarında (Microsoft Office .docx, .xlsx, .pptx), Office Belge Biçimi dosyalarında (.odt, .ods, .odp) ve EPUB dosyalarında (.epub) kullanıldığı gibi kısıtlı bir zip biçimidir. Bu standart, sıkıştırma yöntemlerini 0 ve 8 ile sınırlar ve şifreleme veya imza olmaması gibi diğer kısıtlamaları da içerir.
1990 civarında, Info-ZIP grubu Deflate formatı ile sıkıştırmayı ve bu ve önceki formatların dekompresyonunu destekleyen zip
ve unzip
yardımcı programlarının taşınabilir, ücretsiz, açık kaynaklı uygulamalarını yazdı. Bu, .zip
formatının kullanımını büyük ölçüde genişletti.
90'lı yılların başında, gzip formatı, Info-ZIP yardımcı programlarındaki Deflate kodundan türetilen Unix compress
yardımcı programının yerine geliştirilmiştir. Unix compress
, dosya adına bir .Z
ekleyerek tek bir dosyayı veya akışı sıkıştırmak için tasarlanmıştır. compress, o zamanlar patent altında olan ve serbest kullanımı patent sahipleri tarafından tartışmalı olan [LZW sıkıştırma algoritmasını][11] kullanır. Deflate'in bazı özel uygulamaları Phil Katz tarafından patentlenmiş olsa da, format patentli değildi ve bu nedenle herhangi bir patenti ihlal etmeyen bir Deflate uygulaması yazmak mümkündü. Bu uygulamaya son 20 yılı aşkın süredir itiraz edilmemiştir. Unix
gzipyardımcı programı
compressiçin bir yedek olarak tasarlanmıştır ve aslında
compresssıkıştırılmış verileri açabilir (bu cümleyi ayrıştırabildiğinizi varsayarak). gzip
dosya adına bir .gz
ekler. gzip, Unix
compressten biraz daha iyi sıkıştıran, çok hızlı açma özelliğine sahip olan ve veriler için bütünlük kontrolü olarak bir CRC-32 ekleyen Deflate sıkıştırılmış veri biçimini kullanır. Başlık formatı ayrıca
compressformatının izin verdiğinden daha fazla bilginin saklanmasına izin verir, örneğin orijinal dosya adı ve dosya değişiklik zamanı gibi. Compress
sadece tek bir dosyayı sıkıştırsa da, tar
yardımcı programını kullanarak dosyaların arşivini, niteliklerini ve dizin yapılarını tek bir .tar
dosyasında oluşturmak ve daha sonra compress
ile sıkıştırarak bir .tar.Z
dosyası yapmak yaygındı. Aslında tar
yardımcı programının tar
çıktısını compress
e aktarmak yerine sıkıştırmayı aynı anda yapmak için bir seçeneği vardı ve hala var. Tüm bunlar gzip formatına taşındı ve tar
doğrudan .tar.gz
formatına sıkıştırma seçeneğine sahip. tar.gzformatı
.zipyaklaşımından daha iyi sıkıştırır, çünkü bir
.tarsıkıştırması dosyalar arasındaki fazlalıktan, özellikle de birçok küçük dosyadan yararlanabilir. Çok yüksek taşınabilirliği nedeniyle
.tar.gzUnix
te kullanılan en yaygın arşiv biçimidir, ancak kullanılan daha etkili sıkıştırma yöntemleri de vardır, bu nedenle sık sık .tar.bz2
ve .tar.xz
arşivlerini görürsünüz.
.tarın aksine,
.zipin sonunda içeriğin bir listesini sağlayan merkezi bir dizin vardır. Bu ve ayrı sıkıştırma, bir
.zipdosyasındaki tek tek girdilere rastgele erişim sağlar. Bir
.tardosyasının bir dizin oluşturmak için sıkıştırmasının açılması ve baştan sona taranması gerekir, bu da bir
.tardosyasının nasıl listelendiğini gösterir. Gzip'in piyasaya sürülmesinden kısa bir süre sonra, 1990'ların ortalarında, aynı patent anlaşmazlığı, ilan panolarında ve World Wide Web'de (o zamanlar yeni bir şeydi) çok yaygın olarak kullanılan
.gif' görüntü formatının serbest kullanımını sorguladı. Böylece küçük bir grup, .gif
in yerini almak üzere dosya türü .png
olan kayıpsız sıkıştırılmış görüntü formatı PNGyi yarattı. Bu format da sıkıştırma için Deflate formatını kullanır ve bu format görüntü verileri üzerindeki filtreler fazlalıkları ortaya çıkardıktan sonra uygulanır. PNG formatının yaygın kullanımını teşvik etmek amacıyla iki ücretsiz kod kütüphanesi oluşturulmuştur. [libpng][12] ve [zlib][5]. libpng, PNG formatının tüm özelliklerini ele aldı ve zlib, libpng ve diğer uygulamalar tarafından kullanılmak üzere sıkıştırma ve açma kodunu sağladı. zlib,
gzipkodundan uyarlandı. Bahsedilen tüm patentlerin süresi dolmuştur. Zlib kütüphanesi Deflate sıkıştırma ve açma işlemlerini ve deflate akışlarının etrafına üç çeşit sarma işlemini destekler. Bunlar: hiç sarma yok ("raw" deflate), PNG formatındaki veri bloklarında kullanılan [zlib sarma][7] ve programcı için gzip rutinleri sağlamak için gzip sarma. Zlib ve gzip sarma arasındaki temel fark, zlib sarmanın daha kompakt olması, gzip için en az 18 bayta karşılık altı bayt olması ve bütünlük kontrolü olan Adler-32'nin gzip'in kullandığı CRC-32'den daha hızlı çalışmasıdır. Ham deflate, deflate sıkıştırılmış verilerin etrafını saran başka bir format olan
.zip` formatını okuyan ve yazan programlar tarafından kullanılır.
zlib şu anda veri iletimi ve depolaması için geniş bir 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.
Deflate'in farklı uygulamaları, aynı girdi verisi için farklı sıkıştırılmış çıktılarla sonuçlanabilir, bu da CPU zamanı için sıkıştırma etkinliğinin takas edilmesine izin veren seçilebilir sıkıştırma seviyelerinin varlığından anlaşılmaktadır. zlib ve PKZIP, deflate sıkıştırma ve açma işlemlerinin tek uygulamaları değildir. Hem 7-Zip arşivleme programı hem de Google'ın zopfli kütüphanesi deflate formatını kullanırken mümkün olan son birkaç biti sıkıştırmak için zlib'den çok daha fazla CPU zamanı kullanma yeteneğine sahiptir ve sıkıştırılmış boyutları zlib'nin en yüksek sıkıştırma seviyesine kıyasla yüzde birkaç oranında azaltır. Gzip'in paralel bir uygulaması olan pigz yardımcı programı, zlib (sıkıştırma seviyeleri 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 fazla işlemci ve çekirdeğe bölerek zopfli kullanmanın zaman etkisini biraz azaltır.
ZIP kayıpsız sıkıştırma ile rastgele sayıda dosya ve klasörü bir arada saklamak için kullanılan bir dosya formatıdır. Kullanılan sıkıştırma yöntemleri hakkında katı varsayımlarda bulunmaz, ancak en sık DEFLATE ile birlikte kullanılır.
Gzip hem DEFLATE tabanlı ancak potansiyel patentler ve diğerleriyle daha az yüklü bir sıkıştırma algoritması hem de tek bir sıkıştırılmış dosyayı saklamak için bir dosya formatıdır. tar](https://en.wikipedia.org/wiki/Tar_(file_format)) ile birleştirildiğinde keyfi sayıda dosya ve klasörün sıkıştırılmasını destekler. Ortaya çıkan dosya .tgz
veya .tar.gz
uzantısına sahiptir ve genellikle tarball olarak adlandırılır.
zlib, DEFLATE'i en yaygın LZ77 enkarnasyonunda kapsayan bir fonksiyon kütüphanesidir.
En önemli fark, gzip sadece tek bir dosyayı sıkıştırabilirken, zip birden fazla dosyayı tek tek sıkıştırır ve daha sonra bunları tek bir dosyada arşivler. Bu nedenle, gzip çoğu zaman tar ile birlikte gelir (yine de başka olasılıklar da vardır). Bu bazı (dez)avantajlarla birlikte gelir.
Büyük bir arşiviniz varsa ve içinden sadece tek bir dosyaya ihtiyacınız varsa, o dosyaya ulaşmak için tüm gzip dosyasını açmanız gerekir. Eğer 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 tar ile birlikte gzip'te tek bir dosya sıkıştırılır, bu da dosyalar benzer (eşit) ise çok daha etkilidir.