2012-03-28 16 views
11

मेरे पास एक एपीआई कॉल है जो बाइट सरणी देता है। मैं वर्तमान में परिणाम को बाइट सरणी में स्ट्रीम करता हूं, फिर सुनिश्चित करें कि चेकसम मिलान करें और फिर फ़ाइल में ByteArrayOutputStream लिखें। कोड इस तरह कुछ है और यह बहुत अच्छी तरह से काम करता है।फ़ाइल में संभावित रूप से विशाल इनपुटस्ट्रीम कैसे लिखें?

String path = "file.txt"; 
    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
    int bufferSize = 1024; 
    byte[] buffer = new byte[bufferSize]; 
    int len = 0; 
    while ((len = inputStream.read(buffer)) != -1) { 
     byteBuffer.write(buffer, 0, len); 
    } 
    FileOutputStream stream = new FileOutputStream(path); 
    stream.write(byteBuffer.toByteArray()); 

मेरी चिंता का विषय मैं InputStream से परिणाम संभावित एंड्रॉयड में ढेर आकार से भी बड़ा हो सकता है कि और मैं OutOfMemory अपवाद हो सकता है अगर पूरे बाइट सरणी स्मृति में है। इनपुट में स्ट्रीम करने के लिए इनपुटस्ट्रीम लिखने का सबसे शानदार तरीका क्या है, जैसे बाइट सरणी ढेर आकार से कभी बड़ा नहीं है?

+0

द्वारा सजाया गया है, तो आप मेरी चिंता का सुझाव अप्रासंगिक है? – JoeLallouz

+1

बस 'ByteArrayOutputStream' के उपयोग को खत्म करें। (मैंने इसे गलत पढ़ा .. मेरा बिल्कुल उपयोग है?) –

उत्तर

10

मैं ByteArrayOutputStream छोड़ सकते हैं और FileOutputStream लिखने के लिए सलाह के साथ चला गया और यह मेरी चिंताओं को दूर करने लगता है। एक त्वरित समायोजन के साथ, जहां FileOutputStream को BufferedOutputStream

String path = "file.txt"; 
OutputStream stream = new BufferedOutputStream(new FileOutputStream(path)); 
int bufferSize = 1024; 
byte[] buffer = new byte[bufferSize]; 
int len = 0; 
while ((len = is.read(buffer)) != -1) { 
    stream.write(buffer, 0, len); 
} 
if(stream!=null) 
    stream.close(); 
+0

'fileInputStream' होना चाहिए' है? यह अपरिभाषित –

+1

सीधे फ़ाइलऑटपुटस्ट्रीम का उपयोग करने के बजाय BufferedOutputStream का उपयोग करने का क्या फायदा है? – Xan

14

ByteArrayOutputStream पर मत लिखें। सीधे FileOutputStream पर लिखें।

String path = "file.txt"; 
FileOutputStream output = new FileOutputStream(path); 
int bufferSize = 1024; 
byte[] buffer = new byte[bufferSize]; 
int len = 0; 
while ((len = inputStream.read(buffer)) != -1) { 
    output.write(buffer, 0, len); 
} 
+0

हमम मुझे लगता है कि समझ में आता है। – JoeLallouz

+0

मैं इस आउटपुटस्ट्रीम आउटपुट = नए बुफर्डऑटपुटस्ट्रीम (नया फ़ाइलऑटपुटस्ट्रीम (पथ)) के साथ गया; FileOutputStream दस्तावेज़ पढ़ने के बाद। – JoeLallouz

+0

इसे प्रतिबिंबित करने के लिए मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें, और इसे स्वीकार करें। अन्यथा, आप अपने उत्तर को पोस्ट/स्वीकार कर सकते हैं और स्वीकार कर सकते हैं। –

संबंधित मुद्दे