ZIP dosya biçimi, birden fazla dosyanın tek bir sıkıştırılmış dosyada bir araya getirilmesine olanak tanıyan yaygın olarak kullanılan bir sıkıştırma ve arşivleme biçimidir. İlk olarak 1989'da Phil Katz tarafından oluşturulmuştur ve o zamandan beri dosya sıkıştırma ve dağıtımı için yaygın bir standart haline gelmiştir. ZIP biçimi, içerilen dosyaların boyutunu küçültmek için kayıpsız sıkıştırma algoritmalarının bir kombinasyonunu kullanır ve yine de bunların talep üzerine ayrı ayrı çıkarılmasına izin verir.
Bir ZIP arşivi, her biri sıkıştırılmış bir dosyayı temsil eden bir dizi dosya kaydından oluşur ve ardından arşivin sonunda bir merkezi dizin gelir. Her dosya kaydı, adı, boyutu ve zaman damgaları gibi dosya hakkında meta verileri ve sıkıştırılmış dosya verilerinin kendisini içerir. Merkezi dizin, arşivdeki tüm dosya kayıtlarının bir listesini ve ek meta verileri içerir.
ZIP biçimi çeşitli sıkıştırma yöntemlerini destekler, ancak en yaygın olarak kullanılanı LZ77 algoritmasına ve Huffman kodlamasına dayanan DEFLATE'tir. DEFLATE, tekrarlanan veri dizilerini bularak ve bunları daha önceki oluşumların referanslarıyla değiştirerek, sıkıştırılmış verileri verimli bir şekilde temsil etmek için Huffman kodlamasıyla birleştirerek çalışır. Bu, özellikle metin tabanlı dosyalar için önemli ölçüde boyut küçültmeye olanak tanır.
Bir ZIP arşivi oluşturmak için dosyalar önce seçilen sıkıştırma yöntemi kullanılarak ayrı ayrı sıkıştırılır. Her sıkıştırılmış dosya daha sonra bir yerel dosya başlığı ve ardından sıkıştırılmış veriler içeren bir dosya kaydı olarak arşive eklenir. Yerel dosya başlığı, dosya adı, sıkıştırma yöntemi, CRC-32 sağlama toplamı, sıkıştırılmış ve sıkıştırılmamış boyutlar ve zaman damgaları gibi meta verileri içerir.
Tüm dosya kayıtları eklendikten sonra, merkezi dizin arşivin sonuna yazılır. Merkezi dizin bir imza ile başlar ve her dosya kaydı için yerel dosya başlıklarına benzer meta veriler içeren bir dosya başlığı içerir. Ek olarak, merkezi dizin arşivin tamamı hakkında dosya sayısı ve merkezi dizinin boyutu gibi bilgiler içerir.
Son olarak, ZIP arşivi, bir imza, merkezi dizinin başladığı disk sayısı, merkezi dizin kayıtlarının sayısı, merkezi dizinin boyutu, merkezi dizinin arşivin başlangıcına göre başlangıç ofseti ve bir yorum alanı içeren merkezi dizin sonu kaydıyla sonuçlandırılır.
ZIP biçiminin temel özelliklerinden biri, çeşitli sıkıştırma yöntemlerini destekleme yeteneğidir. DEFLATE'e ek olarak, STORE yöntemini (sıkıştırma yok), BZIP2, LZMA, PPMd ve diğerlerini de destekler. Bu esneklik, kullanım durumunun özel gereksinimlerine bağlı olarak sıkıştırma oranı ve işleme süresi arasında bir denge sağlar.
ZIP biçiminin bir diğer önemli yönü de dosya ve dizin şifrelemesine verdiği destektir. Geleneksel ZIP şifreleme şeması, basit bir parola tabanlı şifreleme yöntemi kullanıyordu, ancak bu, modern ZIP araçlarında daha güvenli AES şifrelemesiyle büyük ölçüde değiştirildi. Bir dosya şifrelendiğinde, sıkıştırılmış verileri seçilen şifreleme yöntemi kullanılarak şifrelenir ve şifreleme durumunu belirtmek için dosya başlığına ek meta veriler eklenir.
ZIP biçimi ayrıca veri bütünlüğü denetimi ve hata tespiti için özellikler içerir. Her dosya kaydı, çıkarıldıktan sonra dosyanın bütünlüğünün doğrulanmasına olanak tanıyan sıkıştırılmamış verilerin bir CRC-32 sağlama toplamını içerir. Ek olarak, merkezi dizin, tüm merkezi dizin yapısının bir CRC-32 sağlama toplamını içerir ve arşivin tamamı için ek bir bütünlük denetimi katmanı sağlar.
Yıllar geçtikçe, ZIP biçiminin işlevselliğini ve verimliliğini artırmak için çeşitli uzantılar ve geliştirmeler yapılmıştır. Bu tür bir uzantı, 4 GB'tan büyük arşivlere ve dosyalara izin veren ZIP64 biçimidir. Bu, orijinal 32 bitlik alanlar yerine boyut ve ofset değerleri için 64 bitlik alanlar kullanılarak elde edilir. Bir diğer uzantı ise dosya adı ve yorum kodlamasının kullanılmasıdır ve bu da dosya adlarında ve yorumlarda Unicode karakterlerinin kullanılmasına olanak tanır.
ZIP biçimi ayrıca ofis verimliliği paketleri tarafından kullanılan OpenDocument biçimi, Java uygulamalarını dağıtmak için kullanılan JAR (Java Arşivi) biçimi ve e-kitaplar için kullanılan EPUB biçimi gibi çeşitli özel bağlamlarda kullanım için uyarlanmıştır. Bu durumlarda, ZIP biçimi, ilgili biçimler tarafından gereken belirli dosya türleri ve meta veriler için bir kapsayıcı görevi görür.
Yaşına rağmen, ZIP biçimi platformlar ve cihazlar arasında yaygın olarak kullanılmaya ve desteklenmeye devam etmektedir. Basitliği, verimliliği ve uyumluluğu, onu dosya sıkıştırma ve dağıtımı için tercih edilen bir seçenek haline getirmiştir. Bununla birlikte, ZIP biçiminin bölünmüş arşivler, sağlam sıkıştırma veya kurtarma kayıtları için yerleşik destek eksikliği gibi bazı sınırlamaları da vardır.
Bu sınırlamaların bazılarını gidermek için RAR, 7z ve TAR gibi alternatif arşivleme biçimleri geliştirilmiştir. Bu biçimler bazı durumlarda ek özellikler ve geliştirilmiş sıkıştırma oranları sunar, ancak ZIP ile aynı düzeyde evrensel desteğe sahip olmayabilirler.
Sonuç olarak, ZIP dosya biçimi, zamanın testine dayanmış çok yönlü ve verimli bir sıkıştırma ve arşivleme biçimidir. Birden fazla dosyayı bir araya getirme, bunları verimli bir şekilde sıkıştırma ve veri bütünlüğü denetimi sağlama yeteneği, onu dosya depolama ve dağıtımı için vazgeçilmez bir araç haline getirmiştir. Bazı sınırlamalara rağmen, ZIP biçimi basitliği ve uyumluluğu sayesinde yaygın olarak kullanılmaya ve desteklenmeye devam etmektedir.
Dosya sıkıştırma, aynı bilgiyi daha az bit ile temsil etmek için fazlalıkları azaltır. Ne kadar küçülebileceğinizi belirleyen üst sınır bilgi teorisidir: kayıpsız sıkıştırmada limit kaynağın entropisidir (bkz. Shannon'ın kaynak kodlama teoremi source coding theorem ve 1948 tarihli “A Mathematical Theory of Communication”). Kayıplı sıkıştırmada bit hızı ile kalite arasındaki dengeyi rate–distortion teorisiaçıklar.
Çoğu sıkıştırıcı iki aşamalıdır. Önce bir model verideki yapıyı tahmin eder veya ortaya çıkarır. Ardından bir coder bu tahminleri neredeyse optimal bit kalıplarına çevirir. Klasik aile Lempel–Ziv'dir LZ77 (1977) ve LZ78 (1978) tekrarlanan alt dizileri bulup ham bayt yerine referans yazar. Kodlama tarafında Huffman kodlama (bkz.1952 makalesi) olasılığı yüksek sembollere daha kısa kodlar verir. Aritmetik kodlama ve range coding entropi sınırına daha da yaklaşır; modern Asymmetric Numeral Systems (ANS) ise tablo tabanlı uygulamalarla benzer oranlar elde eder.
DEFLATE (gzip, zlib, ZIP) LZ77 ile Huffman'ı birleştirir. Spesifikasyonlar açık: DEFLATE RFC 1951, zlib sarmalayıcısı RFC 1950ve gzip formatı RFC 1952. Gzip akış için tasarlandı ve rastgele erişim vaat etmez. PNG, tek sıkıştırma yöntemi olarak DEFLATE'i (32 KiB pencere) standartlaştırır; bkz.“Compression method 0…” ve W3C/ISO PNG 2nd Edition.
Zstandard (zstd): yüksek oranlar ve çok hızlı açma için tasarlanan yeni nesil genel kompresör. Format RFC 8878 (ayrıca HTML yansısı) ve referans dokümanı GitHub'daaçıklanmıştır. Gzip gibi temel çerçeve rastgele erişim hedeflemez. Zstd'nin süper gücü sözlüklerdir: korpusunuzdan küçük örnekler birçok küçük/benzer dosyayı ciddi biçimde küçültür (bkz.python-zstandard sözlük dokümanları ve Nigel Tao örneği). Uygulamalar “unstructured” ve “structured” sözlükleri destekler (tartışma).
Brotli: web içeriği (örn. WOFF2 fontlar, HTTP) için optimize edildi. Statik sözlük ile DEFLATE benzeri LZ+entropi çekirdeğini birleştirir. Spesifikasyon RFC 7932, ayrıca WBITS [10, 24] (1 KiB−16 B ile 16 MiB−16 B) aralığında 2WBITS−16 kayar pencere ve rastgele erişim sağlamadığınıbelirtir. Brotli çoğu web metninde gzip'i geçer ve hızlı çözülür.
ZIP konteyneri: ZIP, farklı sıkıştırma yöntemleri (deflate, store, zstd vb.) taşıyabilen bir arşivdir. De facto standart PKWARE APPNOTE'tur (bkz.APPNOTE portalı, barındırılan kopyave LC özetleri ZIP File Format (PKWARE) / ZIP 6.3.3).
LZ4 mütevazı oranlarla ham hız hedefler. Proje sayfasına (“extremely fast compression”) ve frame formatınabakın. RAM hızına yakın dekompresyon gerektiren bellek içi cache'ler, telemetri veya sıcak yollar için ideal.
XZ / LZMA yüksek yoğunluk (yüksek oran) için daha yavaş sıkıştırmayı göze alır. XZ bir konteynerdir; asıl işi genelde LZMA/LZMA2 (LZ77 benzeri modelleme + range coding) yapar. .xz formatı, LZMA spesifikasyonu (Pavlov)ve Linux kernel notları XZ Embeddedile XZ genelde gzip'ten daha iyi sıkıştırır ve modern yüksek oranlı codec'lerle rekabet eder, fakat kodlama süresi uzundur.
bzip2, Burrows–Wheeler dönüşümünü (BWT), move-to-front'u, RLE'yi ve Huffman'ı kullanır. Genellikle gzip'ten küçük ama daha yavaştır; resmi kılavuza ve man sayfasınabakın.
“Pencere boyutu” önemlidir. DEFLATE referansları yalnızca 32 KiB geriye bakabilir (RFC 1951) ve PNG'nin 32 KiB sınırı burada belirtilir. Brotli yaklaşık 1 KiB ile 16 MiB arası pencereleri destekler (RFC 7932). Zstd pencereyi ve arama derinliğini seviyeler ile ayarlar (RFC 8878). gzip/zstd/brotli'nin temel akışları ardışık çözümeye göre tasarlanır; formatların kendileri rastgele erişim garantilemez, ancak konteynerler (tar indeksleri, parça bazlı çerçeveler, format spesifik indeksler) ekleyebilir.
Yukarıdaki formatlar kayıpsızdır: aynı baytları geri alırsınız. Medya codec'leri genellikle kayıplıdır: daha düşük bit hızları için algılanmayan detayları atarlar. Görsellerde klasik JPEG (DCT, kantizasyon, entropi kodlama) ITU-T T.81 / ISO/IEC 10918-1içinde standarttır. Seste MP3 (MPEG-1 Layer III) ve AAC (MPEG-2/4) algısal modeller ve MDCT dönüşümleri kullanır (bkz.ISO/IEC 11172-3, ISO/IEC 13818-7ve MDCT özeti burada). Kayıplı ve kayıpsız yöntemler birlikte kullanılabilir (ör. UI için PNG; web codec'leri görsel/video/ses için).
Teori Shannon 1948 · Rate–distortion · Kodlama Huffman 1952 · Aritmetik kodlama · Range coding · ANS. Formatlar DEFLATE · zlib · gzip · Zstandard · Brotli · LZ4 frame · XZ format. BWT zinciri Burrows–Wheeler (1994) · bzip2 kılavuzu. Medya JPEG T.81 · MP3 ISO/IEC 11172-3 · AAC ISO/IEC 13818-7 · MDCT.
Özetle: verilerinize ve kısıtlarınıza uyan bir sıkıştırıcı seçin, gerçek girdiler üzerinde ölçün ve sözlükler ile akıllı çerçevelemenin kazançlarını unutmayın. Doğru eşleşme ile daha küçük dosyalar, daha hızlı transferler ve daha çevik uygulamalar elde eder, doğruluk veya taşınabilirlikten ödün vermezsiniz.
Dosya sıkıştırması, dosyanın boyutunu azaltma işlemidir, genellikle depolama alanını tasarruf etmek veya bir ağ üzerindeki iletimi hızlandırmak için kullanılır.
Dosya sıkıştırması, verilerdeki gereksiz bilgileri belirleyip çıkararak çalışır. İlk verileri daha küçük bir alanda kodlamak için algoritmalar kullanır.
Dosya sıkıştırmanın iki ana türü lossless (kayıpsız) ve lossy (kayıplı) sıkıştırmadır. Kayıpsız sıkıştırma, orijinal dosyanın mükemmel bir şekilde geri yüklenmesini sağlarken, kayıplı sıkıştırma, veri kalitesindeki bazı kayıpların maliyetine daha büyük ölçüde boyut küçültmeyi sağlar.
Popüler bir dosya sıkıştırma aracı örneği, ZIP ve RAR dahil olmak üzere birden fazla sıkıştırma formatını destekleyen WinZip'tir.
Kayıpsız sıkıştırma ile kalite değişmez. Ancak, kayıplı sıkıştırmada, dosya boyutunu daha da küçültmek için az önemli veriler çıkarıldığından kalitede belirgin bir azalma olabilir.
Evet, veri bütünlüğü açısından dosya sıkıştırması güvenlidir, özellikle kayıpsız sıkıştırmayla. Ancak, başka herhangi bir dosyada olduğu gibi, sıkıştırılmış dosyalar da zararlı yazılım veya virüsler tarafından hedef alınabilir, bu yüzden her zaman güvenilir bir güvenlik yazılımı bulundurmak önemlidir.
Neredeyse tüm dosya türleri sıkıştırılabilir, bu türler arasında metin dosyaları, resimler, ses, video ve yazılım dosyaları bulunur. Ancak, elde edilebilecek sıkıştırma seviyesi, dosya türlerine göre önemli ölçüde değişebilir.
ZIP dosyası, bir veya daha fazla dosyanın boyutunu azaltmak için kayıpsız sıkıştırmayı kullanan bir dosya formatı türüdür. ZIP dosyasındaki birden fazla dosya, tek bir dosyada etkili bir şekilde bir araya getirilir, bu da paylaşmayı kolaylaştırır.
Teknik olarak, evet, ancak ek boyut azaltma minimum veya hatta zararlı olabilir. Zaten sıkıştırılmış bir dosyayı sıkıştırmak, bazen sıkıştırma algoritması tarafından eklenen metadatanın neden olduğu boyut artışına neden olabilir.
Bir dosyayı açmak için genellikle bir açma veya açma aracına ihtiyacınız vardır, örneğin WinZip veya 7-Zip. Bu araçlar, sıkıştırılmış formatından orijinal dosyaları çıkarabilir.