मेरे पास java.util.zip
लाइब्रेरी से संबंधित कुछ सामान्य प्रश्न हैं। हम मूल रूप से क्या करते हैं एक आयात और कई छोटे घटकों का निर्यात है। इससे पहले इन घटकों का आयात किया गया है और एक भी बड़ी फ़ाइल, उदा .:java.util.zip - ZipInputStream vs.s. ZipFile
<component-type-a id="1"/>
<component-type-a id="2"/>
<component-type-a id="N"/>
<component-type-b id="1"/>
<component-type-b id="2"/>
<component-type-b id="N"/>
कृपया ध्यान दें कि आयात के दौरान घटकों के क्रम प्रासंगिक है का उपयोग कर निर्यात किया।
अब प्रत्येक घटक को अपनी फ़ाइल पर कब्जा करना चाहिए जो बाहरी संस्करण, क्यूए-एड, ब्लै, ब्लै। होना चाहिए। हमने फैसला किया कि हमारे निर्यात का आउटपुट एक ज़िप फ़ाइल होना चाहिए (इन सभी फ़ाइलों के साथ) और हमारे आयात का इनपुट एक समान ज़िप फ़ाइल होना चाहिए। हम अपने सिस्टम में ज़िप को विस्फोट नहीं करना चाहते हैं। हम प्रत्येक छोटी फाइलों के लिए अलग-अलग धाराएं खोलना नहीं चाहते हैं। मेरे वर्तमान प्रश्न:
प्रश्न 1। ZipInputStream
गारंटी दे सकता है कि ज़िप प्रविष्टियां (छोटी फ़ाइलें) उसी क्रम में पढ़ी जाएंगी जिसमें उन्हें हमारे निर्यात द्वारा डाला गया था जो ZipOutputStream
का उपयोग करता है?
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null)
{
//read from zis until available
}
मुझे पता है कि केंद्रीय ज़िप निर्देशिका ज़िप फ़ाइल के अंत में डाल दिया जाता है, लेकिन फिर भी फ़ाइल प्रविष्टियों के अंदर अनुक्रमिक क्रम है: मैं पढ़ यह मानें कि कुछ की तरह है। मुझे यह भी पता है कि आदेश पर भरोसा करना एक बदसूरत विचार है, लेकिन मैं सिर्फ सभी तथ्यों को ध्यान में रखना चाहता हूं।
प्रश्न 2। अगर मैं ZipFile
(जिसे मैं पसंद करता हूं) का उपयोग करता हूं तो getInputStream()
को सैकड़ों बार कॉल करने का प्रदर्शन प्रभाव क्या है? क्या यह ZipInputStream
समाधान से बहुत धीमा होगा? ज़िप केवल एक बार खोला जाता है और ZipFile
RandomAccessFile
द्वारा समर्थित है - क्या यह सही है? मुझे लगता है कि पढ़ने कुछ ऐसा है:
ZipFile zipfile = new ZipFile(argv[0]);
Enumeration e = zipfile.entries();//TODO: assure the order of the entries
while(e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
is = zipfile.getInputStream(entry));
}
Q3। क्या इनपुट स्ट्रीम उसी ZipFile
थ्रेड से पुनर्प्राप्त हैं (उदा। क्या मैं अलग-अलग धागे में अलग-अलग प्रविष्टियों को पढ़ सकता हूं)? कोई प्रदर्शन दंड?
आपके उत्तरों के लिए धन्यवाद!
हाय StaxMan! मैं बस जेडीके 6 में ज़िपफाइल $ ज़िपफाइलइनपुटस्ट्रीम के कार्यान्वयन की जांच कर रहा था। यह ZipFile.getInputStream द्वारा वापस किया गया है यह सिंक्रनाइज़ेशन है हालांकि मैं वास्तव में नहीं जानता कि यह कितना विश्वसनीय है। –
हाँ, मैं यह सुनिश्चित नहीं कर सकता कि यह गैर-थ्रेड-सुरक्षित है। एक और खतरनाक हिस्सा अंतर्निहित देशी ज़्लिब लाइब्रेरी है, जो मुझे संदेह है कि थ्रेड-सुरक्षित नहीं है। – StaxMan
मैं इस तथ्य की गवाही दे सकता हूं कि यह दर्दनाक अनुभव के माध्यम से थ्रेडसेफ नहीं है। – Joel