Zlib, gzip और zip कैसे संबंधित हैं? उनके पास क्या आम है और वे कैसे अलग हैं?


948

Zlib में उपयोग किया जाने वाला कम्प्रेशन एल्गोरिथ्म अनिवार्य रूप से gzip और zip जैसा ही है । गज़िप और ज़िप क्या हैं ? वे कैसे अलग हैं और वे एक ही कैसे हैं?

जवाबों:


2476

संक्षिप्त रूप:

.zipएक संग्रह प्रारूप का उपयोग कर, आमतौर पर, संपीड़न संपीड़न विधि है.gzGzip प्रारूप भी Deflate संपीड़न विधि का उपयोग कर, एकल फ़ाइलों के लिए है। अक्सर gzip के साथ संयोजन में प्रयोग किया जाता है एक संकुचित संग्रह प्रारूप बनाने के लिए टार , .tar.gzZlib पुस्तकालय ज़िप, gzip, द्वारा उपयोग के लिए Deflate संपीड़न और विसंपीड़न कोड प्रदान करता है png (जो का उपयोग करता है zlib आवरण Deflate डेटा पर), और कई अन्य अनुप्रयोगों।

लंबा फार्म:

ज़िप प्रारूप एक खुला विनिर्देश, जहां उनके कार्यान्वयन, PKZIP, शेयरवेयर था के साथ एक खुली प्रारूप के रूप में फिल Katz द्वारा विकसित किया गया था। यह एक संग्रह प्रारूप है जो फाइलों और उनकी निर्देशिका संरचना को संग्रहीत करता है, जहां प्रत्येक फ़ाइल व्यक्तिगत रूप से संपीड़ित होती है। फ़ाइल प्रकार है .zip। फ़ाइलें, साथ ही निर्देशिका संरचना, वैकल्पिक रूप से एन्क्रिप्ट किया जा सकता है।

ज़िप प्रारूप कई संपीड़न विधियों का समर्थन करता है:

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 से 7 ऐतिहासिक हैं और उपयोग में नहीं हैं। ९ through के माध्यम से ९ relatively तरीके अपेक्षाकृत हाल ही के जोड़ हैं, और अलग-अलग, छोटी मात्रा में उपयोग होते हैं। ज़िप प्रारूप में वास्तव में व्यापक उपयोग की एकमात्र विधि विधि 8, डीफ़्लैट और कुछ हद तक विधि 0 है, जो बिल्कुल भी संपीड़न नहीं है। वस्तुतः हर .zipफाइल जो आप जंगल में भरेंगे, विशेष रूप से 8 और 0 के तरीकों का उपयोग करेंगे, संभवतः सिर्फ विधि 8। (विधि 8 में प्रभावी रूप से बिना संपीड़न और अपेक्षाकृत कम विस्तार के साथ डेटा को संग्रहीत करने का एक साधन है, और विधि 0 को स्ट्रीम नहीं किया जा सकता है। जबकि विधि 8 हो सकती है।)

आईएसओ / आईईसी 21,320-1: फ़ाइल कंटेनर के लिए 2015 मानक एक प्रतिबंधित ज़िप प्रारूप, जैसे कि जावा में इस्तेमाल संग्रह फ़ाइलों (.jar) के रूप में है, कार्यालय ओपन एक्सएमएल फाइल (माइक्रोसॉफ्ट ऑफिस .docx, .xlsx, .pptx), कार्यालय दस्तावेज़ प्रारूप फाइलें (.odt, .ods, .odp), और EPUB फाइलें (.epub)। यह मानक संपीड़न विधियों को 0 और 8 तक सीमित करता है, साथ ही साथ अन्य बाधाओं जैसे कोई एन्क्रिप्शन या हस्ताक्षर नहीं करता है।

1990 के आस -पास , इन्फो-ज़िप समूह ने डेफलेट प्रारूप के साथ संपीड़न, और उस के विघटन और पहले के स्वरूपों का समर्थन करते हुए पोर्टेबल, फ्री, ओपन सोर्स कार्यान्वयन zipऔर unzipउपयोगिताओं को लिखा । इसने .zipप्रारूप के उपयोग का बहुत विस्तार किया ।

90 के दशक की शुरुआत में, इंजी-जिप यूटिलिटीज में डीफ्लैट कोड से व्युत्पन्न यूनिक्स compressउपयोगिता के प्रतिस्थापन के रूप में गज़िप प्रारूप को विकसित किया गया था । यूनिक्स compressको एक एकल फ़ाइल या स्ट्रीम को संपीड़ित करने के लिए डिज़ाइन किया गया था, एक .Zफ़ाइल नाम के साथ जोड़कर । एलजेडडब्ल्यू संपीड़न एल्गोरिथ्मcompress का उपयोग करता है , जो उस समय पेटेंट के तहत था और इसका मुफ्त उपयोग पेटेंट धारकों द्वारा विवाद में था। हालांकि डीफ्लैट के कुछ विशिष्ट कार्यान्वयन फिल काट्ज द्वारा पेटेंट किए गए थे, लेकिन प्रारूप नहीं था, और इसलिए डिफलेट कार्यान्वयन को लिखना संभव था जो किसी भी पेटेंट पर उल्लंघन नहीं करता था। उस कार्यान्वयन को पिछले 20+ वर्षों में इतनी चुनौती नहीं दी गई है। यूनिक्स gzipउपयोगिता के लिए एक ड्रॉप-इन प्रतिस्थापन के रूप में इरादा थाcompress, और वास्तव में compressडिकम्प्रेस-प्रभावित डेटा (यह मानते हुए कि आप उस वाक्य को पार्स करने में सक्षम थे) में सक्षम है। फ़ाइल नाम के लिए gzipएक appends .gzgzipDeflate कंप्रेस्ड डेटा फॉर्मेट का उपयोग करता है, जो यूनिक्स की तुलना में काफी बेहतर तरीके से संपीड़ित होता है compress, इसमें बहुत तेजी से विघटन होता है, और डेटा के लिए एक अखंडता जांच के रूप में CRC-32 जोड़ता है। शीर्ष लेख प्रारूप compressअनुमति दी गई प्रारूप की तुलना में अधिक जानकारी के भंडारण की अनुमति देता है, जैसे कि मूल फ़ाइल नाम और फ़ाइल संशोधन समय।

हालाँकि compressकेवल एक ही फ़ाइल को संपीड़ित करता है, एक फाइल tarमें फ़ाइलों, उनके गुणों और उनकी निर्देशिका संरचना का संग्रह बनाने के लिए उपयोगिता का उपयोग करना आम था .tar, और फिर compressएक .tar.Zफ़ाइल बनाने के लिए इसे संपीड़ित करना । वास्तव में tarउपयोगिता थी और अभी भी एक ही समय में संपीड़न करने का एक विकल्प है, इसके बजाय आउटपुट को पाइप करने के tarलिए compress। इस सभी ने gzip प्रारूप को आगे बढ़ाया, और प्रारूप में tarसीधे संपीड़ित करने का एक विकल्प है .tar.gztar.gzप्रारूप की तुलना में बेहतर संपीड़ित करता है .zipदृष्टिकोण, एक के संपीड़न के बाद से .tarविशेष रूप से कई छोटे फ़ाइलों फ़ाइलों में अतिरेक का लाभ ले सकते,। .tar.gzइसकी उच्च पोर्टेबिलिटी के कारण यूनिक्स पर उपयोग में सबसे आम संग्रह प्रारूप है, लेकिन साथ ही उपयोग में अधिक प्रभावी संपीड़न विधियां हैं, इसलिए आप अक्सर देखेंगे .tar.bz2और .tar.xzअभिलेखागार।

इसके विपरीत .tar, .zipअंत में एक केंद्रीय निर्देशिका है, जो सामग्री की एक सूची प्रदान करती है। वह और अलग संपीड़न एक .zipफ़ाइल में व्यक्तिगत प्रविष्टियों के लिए यादृच्छिक पहुँच प्रदान करता है । एक .tarनिर्देशिका बनाने के लिए एक फ़ाइल को शुरू से अंत तक विघटित और स्कैन करना होगा, जो कि एक .tarफ़ाइल को सूचीबद्ध कैसे किया जाता है।

1990 के मध्य के आसपास, गज़िप की शुरुआत के तुरंत बाद, एक ही पेटेंट विवाद को .gifछवि प्रारूप के मुफ्त उपयोग पर सवाल कहा जाता था , बहुत व्यापक रूप से बुलेटिन बोर्ड और वर्ल्ड वाइड वेब (उस समय एक नई चीज) पर उपयोग किया जाता है। इसलिए एक छोटे समूह ने फ़ाइल प्रकार के साथ .png, बदलने के लिए PNG दोषरहित संपीड़ित छवि प्रारूप बनाया .gif। वह प्रारूप संपीड़न के लिए डीफ़्लैट प्रारूप का भी उपयोग करता है, जो छवि डेटा पर फ़िल्टर के बाद लागू किया जाता है, अतिरेक का अधिक उजागर करता है। पीएनजी प्रारूप के व्यापक उपयोग को बढ़ावा देने के लिए, दो मुफ्त कोड पुस्तकालय बनाए गए थे। libpng और zlib। libpng ने PNG प्रारूप की सभी विशेषताओं को संभाला, और zlib ने libpng और साथ ही अन्य अनुप्रयोगों के लिए उपयोग के लिए संपीड़न और विघटन कोड प्रदान किया। zlib को gzipकोड से रूपांतरित किया गया था ।

सभी उल्लेखित पेटेंट समाप्त हो चुके हैं।

ज़्लिब लाइब्रेरी डिफ्लेट कम्प्रेशन और डीकम्प्रेसन का समर्थन करती है, और डिफ्लेट धाराओं के आसपास तीन तरह की रैपिंग होती है। वे हैं: कोई रैपिंग नहीं ("रॉ" डिफ्लेट), ज़लीब रैपिंग , जिसका उपयोग पीएनजी प्रारूप डेटा ब्लॉक में किया जाता है, और गज़िप रैपिंग, प्रोग्रामर के लिए गज़िप रूटीन प्रदान करने के लिए। Zlib और gzip रैपिंग के बीच मुख्य अंतर यह है कि zlib रैपिंग अधिक कॉम्पैक्ट, छह बाइट्स बनाम gzip के लिए न्यूनतम 18 बाइट्स है, और अखंडता जांच, Adler-32, CRC-32 की तुलना में अधिक तेज़ चलती है जो gzip उपयोग करता है। कच्चे डिफलेट का उपयोग उन कार्यक्रमों द्वारा किया जाता है .zipजो प्रारूप को पढ़ते और लिखते हैं , जो कि एक और प्रारूप है जो कि संकुचित डेटा के चारों ओर लपेटता है।

zlib अब डेटा ट्रांसमिशन और स्टोरेज के लिए व्यापक उपयोग में है। उदाहरण के लिए, सर्वर और ब्राउज़रों द्वारा अधिकांश HTTP लेनदेन zlib का उपयोग करके डेटा को संपीड़ित और विघटित करते हैं, विशेष रूप से HTTP हेडर का Content-Encoding: deflateअर्थ है zlib डेटा प्रारूप के अंदर लिपटे संपीड़न विधि

अपस्फीति के विभिन्न कार्यान्वयन एक ही इनपुट डेटा के लिए अलग-अलग संपीड़ित आउटपुट में परिणाम कर सकते हैं, जैसा कि चयन योग्य संपीड़न स्तरों के अस्तित्व से प्रकट होता है जो सीपीयू समय के लिए संपीड़न प्रभावशीलता को बंद करने की अनुमति देते हैं। zlib और PKZIP केवल अपस्फीति संपीड़न और विघटन के कार्यान्वयन नहीं हैं। दोनों 7-ज़िप संग्रह उपयोगिता और Google की ज़ोफ़ली लाइब्रेरी में ज़ालिब की तुलना में बहुत अधिक सीपीयू समय का उपयोग करने की क्षमता है, ताकि डिफ्लेक्ट प्रारूप का उपयोग करते समय पिछले कुछ बिट्स को निचोड़ने के लिए संभव हो सके, zlib के उच्चतम की तुलना में संकुचित आकार को कुछ प्रतिशत तक कम कर सके। संपीड़न स्तर। pigz उपयोगिता, gzip के समानांतर कार्यान्वयन में, zlib (संपीड़न स्तर 1-9) या zopfli (संपीड़न स्तर 11) का उपयोग करने का विकल्प शामिल है, और कई प्रोसेसर और कोर के लिए बड़ी फ़ाइलों के संपीड़न को विभाजित करके zopfli का उपयोग करने के समय के प्रभाव को कम करता है।


113
यह पोस्ट इतने इतिहास और जानकारी के साथ भरी पड़ी है कि मुझे लगता है कि कुछ उद्धरणों को जोड़ने की जरूरत है क्योंकि लोग इस पोस्ट को सूचना स्रोत के रूप में संदर्भित करने का प्रयास करते हैं। हालांकि अगर यह जानकारी विकिपीडिया जैसे उद्धरणों से कहीं परिलक्षित होती है, तो ऐसे ही उद्धृत कार्यों की एक कड़ी की सराहना की जाएगी।
थोरसुमोनर

1348
मैं संदर्भ हूँ, उस सब का हिस्सा रहा हूँ। इस पोस्ट को मूल स्रोत के रूप में विकिपीडिया में उद्धृत किया जा सकता है।
मार्क एडलर

524
FYI करें: मार्क एडलर एक अमेरिकी सॉफ्टवेयर इंजीनियर हैं, और अंतरिक्ष अन्वेषण में भारी रूप से शामिल रहे हैं। उन्हें एडलर -32 चेकसम फ़ंक्शन के लेखक और ज़लीब संपीड़न लाइब्रेरी और गज़िप के सह-लेखक के रूप में डेटा संपीड़न के क्षेत्र में अपने काम के लिए जाना जाता है। उन्होंने इन्फो-ज़िप में योगदान दिया है, और पोर्टेबल नेटवर्क ग्राफिक्स (पीएनजी) छवि प्रारूप विकसित करने में भाग लिया है। एडलर मार्स एक्सप्लोरेशन रोवर मिशन के लिए स्पिरिट क्रूज मिशन मैनेजर भी थे। (विकिपीडिया)
इसहाक हैनसन

99
gixip को Unix compress को बदलने के लिए बनाया गया था। कई कारणों से zip, tar + gzip से बेहतर नहीं है। (जब आप .tar.gzफ़ाइलों को देखते हैं , तो वही होता है।) सबसे पहले, टार + गज़िप, ज़िप से बेहतर संपीड़ित करता है, क्योंकि अगली फ़ाइल का संपीड़न पिछली फ़ाइल से इतिहास का उपयोग कर सकता है (कभी-कभी इसे "ठोस" संग्रह के रूप में संदर्भित किया जाता है)। ज़िप केवल फाइलों को व्यक्तिगत रूप से संपीड़ित कर सकता है। दूसरा, टार यूनिक्स निर्देशिका जानकारी के सभी को संरक्षित करता है, जबकि ज़िप ऐसा करने के लिए डिज़ाइन नहीं किया गया था। (बाद में यूनिक्स-विशिष्ट अतिरिक्त ब्लॉकों के साथ ज़िप प्रारूप में एक्सटेंशन इस समस्या को दूर करने की कोशिश करता है।)
मार्क एडलर

85
आप कार्यान्वयन के साथ भ्रमित करने वाले प्रारूप प्रतीत होते हैं। डिफ्लेट प्रारूप के 7-ज़िप कार्यान्वयन से आपके उद्धृत 2% से 10% तक बेहतर संपीड़न प्राप्त हो सकता है जैसे कि बहुत ही अपस्फीति प्रारूप के साथ gzip की तुलना में बेहतर संपीड़न (जबकि ऐसा करने के लिए बहुत अधिक CPU समय ले रहा है)। 7z LZMA2 प्रारूप 40% बेहतर संपीड़न के आदेश पर प्रदान करता है।
मार्क एडलर

43

ज़िप एक फ़ाइल स्वरूप है जिसका उपयोग फ़ाइलों की एक अनियंत्रित संख्या और फ़ोल्डरों को दोषरहित संपीड़न के साथ करने के लिए किया जाता है। यह उपयोग की जाने वाली संपीड़न विधियों के बारे में कोई सख्त धारणा नहीं बनाता है, लेकिन DEFLATE के साथ सबसे अधिक बार उपयोग किया जाता है ।

Gzip DEFLATE पर आधारित एक सम्पीडन एल्गोरिथ्म है, लेकिन संभावित पेटेंट एट अल, और एक संपीड़ित फ़ाइल को संग्रहीत करने के लिए एक फ़ाइल प्रारूप के साथ कम संलग्न है। यह टार के साथ संयुक्त होने पर फ़ाइलों और फ़ोल्डरों की एक मनमानी संख्या को संपीड़ित करने का समर्थन करता है । परिणामी फ़ाइल का विस्तार है .tgzया .tar.gzइसे आमतौर पर टारबॉल कहा जाता है ।

zlib अपने सबसे आम LZ77 अवतार में DEFLATE को भरने वाले कार्यों की एक लाइब्रेरी है ।


28

सबसे महत्वपूर्ण अंतर यह है कि जिप्पी केवल एक ही फाइल को कंप्रेस करने में सक्षम है, जबकि जिप एक-एक करके कई फाइलों को कंप्रेस करती है और बाद में उन्हें एक सिंगल फाइल में संग्रहीत करती है। इस प्रकार, गज़िप अधिकांश समय टार के साथ आता है (हालांकि अन्य संभावनाएं हैं, हालांकि)। यह कुछ (डिस) लाभों के साथ आता है।

यदि आपके पास एक बड़ा संग्रह है और आपको केवल एक ही फ़ाइल की आवश्यकता है, तो आपको उस फ़ाइल को प्राप्त करने के लिए पूरी gzip फ़ाइल को विघटित करना होगा। यदि आपके पास ज़िप फ़ाइल है, तो इसकी आवश्यकता नहीं है।

दूसरी ओर, यदि आप 10 सीमांकित या समान फ़ाइलों को संपीड़ित करते हैं, तो ज़िप संग्रह बहुत बड़ा हो जाएगा क्योंकि प्रत्येक फ़ाइल व्यक्तिगत रूप से संकुचित होती है, जबकि टार के साथ संयोजन में गज़िप में एक एकल फ़ाइल संपीड़ित होती है जो कि फ़ाइलें अधिक प्रभावी होती हैं समान (बराबर)।


8
आप बिंदु से आगे निकल रहे हैं। अगर लोग रैंडम-एक्सेस संपीड़ित अभिलेखागार चाहते हैं, तो वे ".tar.gz" फ़ाइलों के बजाय ".gz.tar" फाइलें बना सकते हैं। वे नहीं करते, क्योंकि अधिकांश लोग यादृच्छिक अभिगम में रुचि नहीं रखते हैं। .Warc.gz वेब संग्रह प्रारूप के आसपास एक बड़ा समुदाय है, और उन्हें यादृच्छिक अभिगम की आवश्यकता होती है, इसलिए वे प्रत्येक वेब पेज को अलग से संपीड़ित करते हैं। आप इस प्रारूप का उपयोग हर बार जब आप इंटरनेट आर्काइव वेबैक मशीन में एक वेबपेज पर देखते हैं।
ग्रेग लिंडाहल

2
".gz.tar" रैंडम-एक्सेस की पेशकश नहीं करता है क्योंकि टार प्रारूप अपनी प्रविष्टियों को बेतरतीब ढंग से एक्सेस करने में सक्षम नहीं है। आपको एक विशिष्ट प्रविष्टि प्राप्त करने के लिए शुरुआत से ही सभी प्रविष्टियों के माध्यम से जाने की आवश्यकता है, और भी बदतर: आपको अंत तक सभी प्रविष्टियों के माध्यम से जाने की आवश्यकता है क्योंकि एक ही फ़ाइल को कई बार (कई संस्करणों में) कई स्थानों पर संग्रहीत किया जा सकता है एक ही संग्रह में - और यह पता लगाने का कोई साधन नहीं है कि प्रवेश द्वारा पूरे संग्रह प्रविष्टि को पढ़ने के अलावा।
मिन-सू पिपीफ़ेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.