मैं एक java.util.zip.ZipInputStream
से एक एकल फाइल को पढ़ने के लिए कोशिश कर रहा हूँ, और एक java.io.ByteArrayOutputStream
में कॉपी (ताकि मैं तो एक java.io.ByteArrayInputStream
बना सकते हैं और हाथ है कि एक 3 पार्टी पुस्तकालय है कि बंद करने खत्म हो जाएगा करने के लिए कर सकते हैं में एक ZipInputStream से पढ़ना स्ट्रीम, और मैं नहीं चाहता कि मेरा ZipInputStream
बंद हो रहा हो)।एक ByteArrayOutputStream
मैं शायद यहाँ कुछ बुनियादी याद कर रहा हूँ, लेकिन मैं कभी नहीं, जबकि पाश यहां दर्ज करें:
ByteArrayOutputStream streamBuilder = new ByteArrayOutputStream();
int bytesRead;
byte[] tempBuffer = new byte[8192*2];
try {
while ((bytesRead = zipStream.read(tempBuffer)) != -1) {
streamBuilder.write(tempBuffer, 0, bytesRead);
}
} catch (IOException e) {
// ...
}
मैं क्या याद आ रही है कि मुझे धारा कॉपी कर सकते हैं?
संपादित करें:
कि मैंने पहले बताया जाना चाहिए था कि इस ZipInputStream
एक फ़ाइल से नहीं आ रही है, इसलिए मुझे नहीं लगता कि मैं एक ZipFile
का उपयोग कर सकते है। यह सर्वलेट के माध्यम से अपलोड की गई फ़ाइल से आ रहा है।
इसके अलावा, कोड के इस स्निपेट को प्राप्त करने से पहले ZipInputStream
पर मैंने पहले ही getNextEntry()
कहा है। अगर मैं फ़ाइल को किसी अन्य InputStream
(ऊपर उल्लिखित OutputStream
के माध्यम से) में कॉपी करने की कोशिश नहीं करता हूं, और बस मेरी तीसरी पार्टी लाइब्रेरी में ZipInputStream
पास करें, लाइब्रेरी स्ट्रीम बंद कर देती है, और मैं कुछ और नहीं कर सकता, जैसे कि धारा में शेष फाइलें।
तुम अब परवाह नहीं है, लेकिन ** आप सभी डेटा की प्रतिलिपि से बच सकते हैं ** और धारा को बंद 3 डी पक्ष लाइब्रेरी से बचने यदि आप मूल इनपुट स्ट्रीम (zipStream) लपेट और करीब विधि ओवरराइड । 1) सार्वजनिक कक्षा बनाएं DontCloseInputStream FilterInputStream को बढ़ाता है। 2) एक कन्स्ट्रक्टर (इनपुटस्ट्रीम इन) बनाएं जो सुपर (इन) 3 कहता है) बंद विधि को ओवरराइड करें और कुछ भी नहीं करें 4) नया डोंटक्लोस इनपुटस्ट्रीम (ज़िपस्ट्रीम) बनाएं 5) इसे लाइब्रेरी में पास करें। और * voi lá * – helios
और आउटपुटस्ट्रीम पर एक इनपुटस्ट्रीम की प्रतिलिपि बनाने के लिए कॉमन्स-फ़ाइल अपलोड लोड लाइब्रेरी (अपाचे) में स्ट्रीम नामक एक उपयोगिता वर्ग है। आप Streams.copy (इन, आउट, क्लोज़?) करते हैं और यह हो गया है। – helios
तो zipEntry.getSize() वापस क्या करता है? इस मामले में –