Quoth जावाडोक :
धाराओं में एक BaseStream.close () विधि है और AutoCloseable को लागू करता है, लेकिन लगभग सभी स्ट्रीम इंस्टेंस को उपयोग के बाद वास्तव में बंद करने की आवश्यकता नहीं है। आम तौर पर, केवल धाराएँ जिनका स्रोत एक IO चैनल है (जैसे कि Files.lines द्वारा वापस लौटाए गए (पथ, चारसेट) को बंद करने की आवश्यकता होगी। अधिकांश धाराएँ संग्रह, सरणियों या निर्माण कार्यों द्वारा समर्थित हैं, जिनके लिए किसी विशेष संसाधन प्रबंधन की आवश्यकता नहीं होती है। (यदि किसी स्ट्रीम को बंद करने की आवश्यकता होती है, तो इसे एक कोशिश के साथ संसाधनों के बयान में संसाधन के रूप में घोषित किया जा सकता है।)
"लगभग सभी" और "आम तौर पर" अस्पष्ट हैं - यदि आप एक पुस्तकालय लिख रहे हैं और आप उस स्ट्रीम के उपयोगकर्ताओं से अपनी स्ट्रीम के स्रोत को समाप्त कर रहे हैं, तो आपको हमेशा अपने आप से सवाल पूछना होगा - "क्या मुझे बंद करना चाहिए" यह?" IO- समर्थित स्ट्रीम को बंद करने की आवश्यकता है क्योंकि टर्मिनल संचालन कॉल नहीं करता है close
, इसलिए प्रभावी रूप से मुझे हमेशा या तो याद रखना होगा / दस्तावेज़ जहां मेरी स्ट्रीम आ रही है, या मुझे हमेशा यह करना close
है।
परमाणु विकल्प जो मुझे लगता है कि स्ट्रीम से विधियों को वापस करने या स्ट्रीम मापदंडों को स्वीकार करने के लिए नहीं होगा, जो कि एक भावना है जिसे जेडीके टीम पर कुछ लोगों द्वारा प्रतिध्वनित किया गया है। मुझे लगता है कि धाराओं की व्यावहारिक उपयोगिता को देखते हुए अत्यधिक सीमित होना चाहिए।
धाराएँ बंद करने के बारे में आपकी सर्वोत्तम प्रथाएँ क्या हैं? मैंने JDK के कुछ लोगों से इसका जवाब मांगा, जो आमतौर पर इसी तरह के सामुदायिक प्रश्नों पर सक्रिय रहते हैं, लेकिन कुछ भी प्रासंगिक नहीं पाया गया।