के साथ ज़िप में एक बड़ी फ़ाइल को संपीड़ित करने के लिए मुझे जावा क्लास ZipOutputStream के माध्यम से एक बड़ी फ़ाइल (~ 450 Mbyte) को संपीड़ित करने की आवश्यकता है। यह बड़ा आयाम मेरे जेवीएम हीप स्पेस की "आउटऑफमेमरी" त्रुटि की समस्या का कारण बनता है। ऐसा इसलिए होता है क्योंकि "zos.write (...)" विधि सभी फ़ाइल सामग्री को संपीड़ित करने से पहले एक आंतरिक बाइट सरणी में संपीड़ित करने के लिए संग्रहीत करती है।जावा
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(filePath);
zos.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1)
{
zos.write(data, 0, count);
}
origin.close();
प्राकृतिक समाधान JVM के ढेर स्मृति स्थान विस्तार करने के लिए किया जाएगा, लेकिन मैं अगर वहाँ एक स्ट्रीमिंग तरीके से इस डेटा लिखने के लिए एक विधि है पता करना चाहते हैं। मुझे उच्च संपीड़न दर की आवश्यकता नहीं है इसलिए मैं एल्गोरिदम भी बदल सकता हूं।
क्या किसी को इसके बारे में कोई जानकारी है?
बुफेर कितना बड़ा है? –
जैसा कि मैंने 2048 – robob