हम कैसे लिख सकते हैं एक बाइट सरणी के लिए एक फ़ाइल (और इसे वापस पढ़ा है कि फ़ाइल से) जावा में?
हाँ, हम सभी जानते हैं कि वहाँ रहे हैं पहले से ही बहुत सारे सवाल की तरह है कि है, लेकिन वे बहुत ही गंदा और व्यक्तिपरक कारण के लिए तथ्य यह है कि वहाँ रहे हैं तो कई मायनों में इस कार्य को पूरा करने.
तो चलो की गुंजाइश कम सवाल:
डोमेन:
- एंड्रॉयड / जावा
हम क्या चाहते हैं:
- तेजी से (संभव के रूप में)
- बग-मुक्त (एक सख्ती से सूक्ष्म तरीके)
क्या हम नहीं कर रहे हैं:
- तीसरे पक्ष के पुस्तकालयों
- किसी भी पुस्तकालयों की आवश्यकता है कि Android एपीआई के बाद से 23 (Marshmallow)
(तो, कि नियमों के बाहर अपाचे कॉमन्स, गूगल अमरूद, जावा.एनआईओ, और पत्तियों के साथ हमें अच्छा राजभाषा' जावा.io)
क्या हम की जरूरत है:
- बाइट सरणी वास्तव में हमेशा होता है (एक ही सामग्री और आकार) के माध्यम से जाने के बाद लिखने-तो-पढ़ने की प्रक्रिया
- लिखने की विधि के केवल दो तर्क की आवश्यकता है: फ़ाइल, और बाइट[] डेटा
- पढ़ें विधि रिटर्न एक बाइट[] और केवल आवश्यकता है एक तर्क: फ़ाइल फ़ाइल
मेरी खास मामले में, इन तरीकों में निजी रहे हैं (नहीं एक लाइब्रेरी) और कर रहे हैं के लिए जिम्मेदार नहीं बाद, (लेकिन अगर आप चाहते हैं बनाने के लिए एक और अधिक सार्वभौमिक समाधान लागू होता है कि एक व्यापक दर्शकों के लिए, इसके लिए जाना है):
- धागे की सुरक्षा (फ़ाइल द्वारा पहुँचा जा नहीं होगा एक से अधिक प्रक्रिया में एक बार)
- फाइल किया जा रहा शून्य
- फ़ाइल की ओर इशारा करते हुए करने के लिए न के बराबर स्थान
- की कमी permissions पर फ़ाइल स्थान
- बाइट सरणी में बहुत बड़ा होने के नाते
- बाइट सरणी में अशक्त होने के नाते
- किसी के साथ निपटने "सूचकांक," "लंबाई," या "संलग्न" तर्क/क्षमताओं
... तो हम कर रहे हैं की तरह की तलाश में निश्चित बुलेट प्रूफ कोड है कि लोगों को भविष्य में मान सकते हैं सुरक्षित है, क्योंकि उपयोग करने के लिए अपने जवाब के बहुत सारे है अप-वोट और वहाँ रहे हैं कोई टिप्पणी नहीं है कि कहते हैं, "हो सकता है कि दुर्घटना अगर..."
यह है कि क्या मैं इतनी दूर है:
लिखने बाइट्स फाइल करने के लिए:
private void writeBytesToFile(final File file, final byte[] data) {
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
}
पढ़ें बाइट्स से फ़ाइल:
private byte[] readBytesFromFile(final File file) {
RandomAccessFile raf;
byte[] bytesToReturn = new byte[(int) file.length()];
try {
raf = new RandomAccessFile(file, "r");
raf.readFully(bytesToReturn);
} catch (Exception e) {
Log.i("XXX", "BUG: " + e);
}
return bytesToReturn;
}
से मैं क्या पढ़ा है, संभव अपवाद हैं:
FileNotFoundException : मैं कर रहा हूँ सही है कि यह नहीं होना चाहिए, के रूप में लंबे समय के रूप में फ़ाइल पथ की आपूर्ति की जा रही थी व्युत्पन्न का उपयोग कर Android के स्वयं के आंतरिक उपकरण और/या एप्लिकेशन को परीक्षण किया गया था ठीक से?
IOException : मैं वास्तव में नहीं पता है क्या इस का कारण बन सकता... लेकिन मैं मान रहा हूँ कि वहाँ के आसपास कोई रास्ता नहीं अगर यह होता है यह.
तो के साथ कि मन में... कर सकते हैं इन तरीकों में सुधार किया जा सकता है या बदल दिया है, और यदि हां, तो क्या?