मैं कुछ बहुत तेज़ जावा कोड लिखने की कोशिश कर रहा हूं जिसे बहुत सारे I/O करना है। मैं एक स्मृति मैप की गई फ़ाइल है कि एक ByteBuffer रिटर्न उपयोग कर रहा हूँ:जावा में मेमोरी-मैप की गई फ़ाइलें
public static ByteBuffer byteBufferForFile(String fname){
FileChannel vectorChannel;
ByteBuffer vector;
try {
vectorChannel = new FileInputStream(fname).getChannel();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
return null;
}
try {
vector = vectorChannel.map(MapMode.READ_ONLY,0,vectorChannel.size());
} catch (IOException e) {
e.printStackTrace();
return null;
}
return vector;
}
समस्या यह है कि मैं आ रही हैं कि ByteBuffer .array() विधि (जो एक बाइट [] सरणी लौटना चाहिए) काम नहीं करता है केवल पढ़ने के लिए फाइलों के लिए। मैं अपना कोड लिखना चाहता हूं ताकि यह डिस्क से पढ़ने वाली मेमोरी और बफर में निर्मित मेमोरी बफर दोनों के साथ काम करेगा। लेकिन मैं अपने सभी बफर को एक ByteBuffer.wrap() फ़ंक्शन को लपेटना नहीं चाहता क्योंकि मुझे चिंता है कि यह चीजों को धीमा कर देगा। तो मैं सब कुछ के दो संस्करण लिख रहा हूं, एक बाइट [] लेता है, दूसरा जो बाइटबफर लेता है।
क्या मुझे बस सबकुछ लपेटना चाहिए? या मुझे सबकुछ दोबारा लिखना चाहिए?
बेंचमार्क और परिणाम पोस्ट करें, भले ही एक विशेषज्ञ आपको एक दिशा में इंगित कर सके कि दिशा आपकी स्थिति के लिए काम नहीं कर सकती है। बेंचमार्क!!!! – basszero