मेरे पास वर्तमान में मेरी लाइब्रेरी में एक व्यावहारिक संसाधन रिसाव है क्योंकि इस तथ्य के कारण कि मैं एक ज़िपफाइल खोलता हूं ताकि एक निश्चित ज़िपेंट्री के लिए लौटाई गई इनपुटस्ट्रीम बंद न हो। हालांकि, लौटाए गए इनपुटस्ट्रीम को बंद करने से बाकी ज़िपफाइल बंद नहीं होता है, इसलिए मैं इसके साथ फंस गया हूं। क्या ZipFile को सुरक्षित रूप से बंद करने और वापस आने के लिए इनपुटस्ट्रीम रखने का कोई तरीका है?क्या ज़िपफ़ाइल बंद होने के बाद ज़िपइन्ट्री जारी रहता है?
/*
* Inner class implementing the input stream used to read a
* (possibly compressed) zip file entry.
*/
private class ZipFileInputStream extends InputStream {
...
public int read(byte b[], int off, int len) throws IOException {
if (rem == 0) {
return -1;
}
if (len <= 0) {
return 0;
}
if (len > rem) {
len = (int) rem;
}
synchronized (ZipFile.this) {
ensureOpenOrZipException();
सूचना #ensureOpenOrZipException
करने के लिए कॉल:
यह एक हैक का थोड़ा सा है, लेकिन यह काम करता है! –
यह एक हैक क्यों है? यह ज़िप # क्लोज़ का एक सरल encapsulation है। मैंने एक और दृष्टिकोण जोड़ा जो मेरा पहला विचार था, लेकिन यह एक मेमोरी बफर का उपयोग करता है, जो आपके लिए काम नहीं कर सकता है। – Kong
असल में कोड को देखते हुए, मुझे एहसास हुआ कि 'getInputStream' केवल एक इनपुटस्ट्रीम देता है, मैंने सोचा कि यह अधिक विशिष्ट था। यह तब एक हैक नहीं है! –