मुझे डिस्क में 40 एमबी फ़ाइल मिली है और मुझे इसे बाइट सरणी का उपयोग करके स्मृति में "मैप" करने की आवश्यकता है।जावा: मेमोरी कुशल ByteArrayOutputStream
सबसे पहले, मैंने सोचा था कि फ़ाइल को बाइटएरे ऑटपुटस्ट्रीम में लिखना सबसे अच्छा तरीका होगा, लेकिन मुझे लगता है कि कॉपी ऑपरेशन के दौरान कुछ पल में 160 एमबी हीप स्पेस लेता है।
क्या किसी को RAM के फ़ाइल आकार के तीन बार उपयोग किए बिना ऐसा करने का बेहतर तरीका पता है?
अद्यतन: आपके उत्तरों के लिए धन्यवाद। मैंने देखा कि मैं मेमोरी खपत को कम बता सकता हूं बाइटएरे ऑटपुटस्ट्रीम प्रारंभिक आकार मूल फ़ाइल आकार से थोड़ा अधिक होना (मेरे कोड बलों के पुनर्विक्रय के साथ सटीक आकार का उपयोग करके, क्यों जांचना है)।
एक और उच्च मेमोरी स्पॉट है: जब मैं बाइट [] वापस ByteArrayOutputStream.toByteArray के साथ मिलता हूं। इसके स्रोत कोड के लिए एक नज़र ले रहा है, मैं देख सकता यह सरणी क्लोनिंग है:
public synchronized byte toByteArray()[] {
return Arrays.copyOf(buf, count);
}
मैं सोच रहा हूँ मैं सिर्फ ByteArrayOutputStream का विस्तार करने और इस विधि को फिर से लिखने सकता है, इसलिए सीधे मूल सरणी वापस जाने के लिए। क्या यहां कोई संभावित खतरा है, धारा और बाइट सरणी को एक से अधिक बार उपयोग नहीं किया जाएगा?
इसी तरह के प्रश्न http://stackoverflow.com/questions/964332/java-large-files-disk-io-performance – Santosh