2015-12-03 7 views
5
private InputStream input; 
private InputStreamReader inputReader; 
private BufferedReader reader; 

try { 
    input = new InputStream(); 
    inputStreamReader = new InputStreamReader(inputStream); 
    reader = new BufferedReader(inputStreamReader); 
    // do I/O operations 
} catch (IOException e) { 
    Log.d("IOException", "The Data Could Not Be Read =/"); 
} finally { 
    try { 
     reader.close(); // now will this, by default, close all other streams? OR 
     /* 
     * input.close(); inputStream.close(); //is this necessary, along with 
     * reader.close(); 
     */ 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

मैं आज इस प्रश्न में आया, और मुझे यकीन नहीं है कि वे बंद हो जाएंगे, क्योंकि यह लपेटा गया है, या यदि सभी स्ट्रीम स्वतंत्र रूप से बंद करना आवश्यक है।क्या मुझे जावा के माध्यम से बफर में लपेटा गया है, तो क्या मुझे सभी धाराएं बंद करने की ज़रूरत है?

+0

यह करीब सभी संबंधित है धाराओं का उपयोग कर सकते है ... लेकिन यह wouldn ' अन्य लोगों को चोट पहुंचाने में चोट नहीं – 3kings

+2

@ 3kings - ठीक है, मैं तर्क दूंगा कि अनावश्यक कोड चोट पहुंचाता है। केवल इसके लिए प्रत्येक पाठक/स्ट्रीम पर अतिरिक्त कॉल जोड़ने के बजाय 'बंद()' के अनुबंध पर भरोसा करना बेहतर है। –

उत्तर

8

यदि कोई पाठक या स्ट्रीम किसी अन्य पाठक/स्ट्रीम को सजाने के लिए, तो बाहरी को बंद करने से आंतरिक भी बंद हो जाता है। यह Closeable#close() की जावाडोक से गर्भित जा सकता है:

इस धारा और विज्ञप्ति किसी भी प्रणाली इसके साथ जुड़े संसाधनों बंद करता है।

यह अंतर्निहित संसाधनों पर भी लागू होता है।

यदि आप बहुत उत्सुक हैं तो आप उन वर्गों के स्रोतों में खोद सकते हैं, उदाहरण के लिए। BufferedReader में:

public void close() throws IOException { 
    synchronized (lock) { 
     if (in == null) 
      return; 
     try { 
      in.close(); 
     } finally { 
      in = null; 
      cb = null; 
     } 
    } 
} 

जहां inReader अंतर्निहित है।

5

हां, सजाए गए धाराएं भी बंद हैं।

InputStream in = new FileInputStream("c:\\myfile.txt"); 
InputStreamReader reader = new InputStreamReader(in); 
BufferedReader bufferedReader = new BufferedReader(reader); 

bufferedReader.close(); 

in.read(); // throws an IOException (no such file or directory) 
reader.read(); // throws an IOException (Stream closed) 
4

जावा 7 से आप कोशिश के साथ-संसाधन ब्लॉक (और तथ्य यह है कि बंद करने reader बंद कर देता है दूसरों)

try (BufferedReader reader = new BufferedReader(
           new InputStreamReader(new FileInputStream(file), "UTF-8"))) { 

    // do I/O operations 
} catch(IOException e) { 
    Log.d("IOException", "The Data Could Not Be Read =/", e); 
} 
संबंधित मुद्दे

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