2010-10-20 17 views

उत्तर

8

यदि आप DataInputStream के स्रोत को देखते हैं तो आप देख सकते हैं कि यह अंतर्निहित धाराओं को भी बंद कर देता है। तो आपको जरूरत नहीं है। और यह सभी प्रकार की धाराओं के लिए सच है (या होना चाहिए)।

+3

इस बिंदु पर, यह दस्तावेज है। यह थोड़ा विखंडित है, लेकिन 'DataInputStream' को 'फ़िल्टर इनपुट स्ट्रीम' से 'करीबी' प्राप्त होता है, जो दस्तावेज़ों को अंतर्निहित 'इनपुटस्ट्रीम' पर 'करीबी' कहते हैं: http://download.oracle.com/javase/6/docs/api /java/io/FilterInputStream.html तो आप जानते हैं कि व्यवहार केवल एक विशेष कार्यान्वयन का दुष्प्रभाव नहीं है। –

+0

दरअसल यह सभी प्रकार के 'बंद करने योग्य' –

+2

@ शेरविन के लिए सच है ... बशर्ते कि वे "अनुबंध" को सही तरीके से कार्यान्वित करें :-) –

1

करज़ी, यह सुझाव देने में सही है। इसके अलावा, बस एक विचार और थोड़ा और अंतर्दृष्टि प्राप्त करने के लिए, जावा आईओ एपीआई वास्तव में सजावटी पैटर्न का उपयोग करके लागू किया गया है। आप विकी पर decorator pattern देख सकते हैं।

1

मैं एक अपवाद के मामले में यह सुनिश्चित करने के लिए बस अंत में ब्लॉक बंद कर दूंगा।

public void tryToDoWhatever() throws Exception 
{ 
    DataInputStream in = null; 
    try 
    { 
     in = new DataInputStream(
       new BufferedInputStream(new FileInputStream(file))); 
    } 
    finally 
    { 
     if (in != null) 
      in.close(); 
    } 
} 
+0

हाँ आप सही हैं लेकिन यह एक नया प्रश्न उठाता है: IOException को कैसे संभाला जा सकता है जिसे फेंक दिया जा सकता है अंदर? बंद ?? अंत में ब्लॉक को पकड़ने या इसे ऊपरी स्तर पर आगे बढ़ाने का प्रयास करें? –

+0

हां यह काफी उम्मीद नहीं है मैं आमतौर पर इसे – willcodejavaforfood

+0

@ मैनुअल सेल्वा - मैं हमेशा व्यापार तर्क से अपवाद हैंडलिंग को अलग करता हूं। मेरे पास 'doWhatever()' नामक एक विधि होगी जिसे कोशिश करने के लिए कोशिश की जाती है जो कुछ भी – willcodejavaforfood

3

मैं इस अवसर का उत्तर उस उत्तर के उत्तर देने के लिए करूंगा जो मैंने पहले ही किया है।

Project Lombok का उपयोग करके आप लंबोक को आपके लिए स्ट्रीम को सही ढंग से बंद कर सकते हैं। विवरण here पाया जा सकता है।

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