स्ट्रीम सुरक्षित रूप से बंद करना
try-with-resources
स्ट्रीम सुरक्षित रूप से बंद करना, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
स्ट्रीम बंद करना क्यों ज़रूरी है
BufferedReader जैसी स्ट्रीम संसाधनों को अपने पास रखती हैं — फ़ाइल हैंडल, मेमोरी बफ़र और कनेक्शन। यदि आप उन्हें कभी बंद नहीं करते हैं, तो वे संसाधन लीक हो सकते हैं।
स्ट्रीम बंद करने से उसके पास मौजूद संसाधन मुक्त हो जाते हैं और लंबित डेटा बाहर भेज दिया जाता है। यह पाठ आपको इन्हें सुरक्षित रूप से बंद करना दिखाता है।
close विधि
हर रीडर में close() विधि होती है। इसे कॉल करने पर संसाधन मुक्त हो जाता है।
System.in को लपेटने वाले BufferedReader के लिए, बंद करने पर उसके अंदर लिपटी हुई स्ट्रीम भी बंद हो जाती हैं।
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
// ... use br ...
br.close();पुराना, जोखिमभरा तरीका
आप close() को हाथ से कॉल कर सकते हैं, लेकिन यदि वह पंक्ति चलने से पहले कोई त्रुटि हो जाए, तो close() नहीं चलता और संसाधन लीक हो जाता है।
close() को finally खंड में रखने से मदद मिलती है, लेकिन कोड लंबा हो जाता है और इसे गलत लिखना आसान है।
BufferedReader br = null;
try {
br = new BufferedReader(
new InputStreamReader(System.in));
// ... use br ...
} finally {
if (br != null) br.close();
}संसाधनों के साथ प्रयास-विधि
Java में इसका अधिक साफ़ समाधान है: संसाधनों के साथ प्रयास-विधि। आप try के बाद कोष्ठकों के अंदर स्ट्रीम घोषित करते हैं और खंड समाप्त होने पर Java उसे अपने-आप बंद कर देता है — भले ही कोई त्रुटि हो जाए।
न finally, न हाथ से close()। यही आधुनिक सर्वोत्तम तरीका है।
try (BufferedReader br =
new BufferedReader(new InputStreamReader(System.in))) {
String line = br.readLine();
System.out.println(line);
}यह कैसे काम करता है
try (...) के कोष्ठकों में घोषित हर संसाधन को AutoCloseable लागू करना चाहिए। BufferedReader ऐसा करता है, इसलिए Java आपके लिए उसका close() कॉल करता है।
खंड सामान्य रूप से समाप्त हो या अपवाद के कारण, उसके समाप्त होने के बाद बंद करने की प्रक्रिया होती है।
एक पूरा उदाहरण
यहाँ एक पूरा प्रोग्राम है, जो एक पंक्ति पढ़ने के लिए संसाधनों के साथ प्रयास-विधि का उपयोग करता है। खंड के अंत में रीडर अपने-आप बंद हो जाता है।
यह System.in से पढ़ता है, इसलिए इनपुट की प्रतीक्षा करता है और यहाँ अपने-आप नहीं चल सकता।
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
try (BufferedReader br = new BufferedReader(
new InputStreamReader(System.in))) {
String name = br.readLine();
System.out.println("Hi " + name);
}
}
}StringReader के साथ चलने योग्य
यह दिखाने के लिए कि संसाधनों के साथ प्रयास-विधि कीबोर्ड इनपुट के बिना भी काम करती है, यहाँ StringReader से पढ़ा गया है। यह पूरी तरह चलने योग्य है।
खंड के बाद रीडर अपने-आप बंद हो जाता है — आपको close() कॉल लिखने की आवश्यकता नहीं है।
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
try (BufferedReader br =
new BufferedReader(new StringReader("done"))) {
System.out.println(br.readLine());
}
}
}कई संसाधन
आप एक ही try में कई संसाधन घोषित कर सकते हैं और उन्हें अर्धविराम से अलग कर सकते हैं। Java उन सभी को घोषणा के उल्टे क्रम में बंद करता है।
जब आप कई स्ट्रीम को एक-दूसरे के अंदर लपेटते हैं, तब यह बहुत उपयोगी होता है।
try (InputStreamReader isr =
new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr)) {
System.out.println(br.readLine());
}पठन त्रुटि पकड़ना
पढ़ने पर IOException उत्पन्न हो सकता है। आप उसे घोषित करने के बजाय संभालने के लिए संसाधनों के साथ प्रयास-विधि वाले खंड में catch जोड़ सकते हैं।
catch चलने से पहले भी संसाधन अपने-आप बंद हो जाता है।
try (BufferedReader br = new BufferedReader(
new InputStreamReader(System.in))) {
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("Read failed");
}क्या आपको System.in बंद करना चाहिए?
एक सावधानी: System.in पर मौजूद रीडर को बंद करने से System.in स्वयं भी बंद हो जाता है और आप उसे दोबारा खोल नहीं सकते।
छोटे प्रोग्रामों के लिए यह ठीक है। लेकिन यदि आपको बाद में भी कंसोल इनपुट चाहिए, तो उस विशेष रीडर को बंद न करें। यह जानना आवश्यक है कि आपकी स्ट्रीम किसे लपेट रही है।
सर्वोत्तम तरीके
स्ट्रीम को सुरक्षित रूप से संभालने के लिए:
- हाथ से
close()करने के बजाय संसाधनों के साथ प्रयास-विधि को प्राथमिकता दें। - त्रुटि होने पर भी यह अपने-आप बंद हो जाती है।
- याद रखें कि
System.inवाले रीडर को बंद करने से मानक इनपुट भी बंद हो जाता है।
संसाधनों को साफ़-सुथरे ढंग से संभालने से लीक और बग रुकते हैं।
त्वरित जाँच
संसाधनों के साथ प्रयास-विधि के मुख्य लाभ के बारे में सोचिए।
पुनरावलोकन
आपने सीखा कि स्ट्रीम को बंद करना क्यों आवश्यक है, हाथ से बंद करने या finally वाले जोखिमभरे तरीके में क्या समस्या है, और संसाधनों के साथ प्रयास-विधि के उस साफ़ पैटर्न के बारे में, जो AutoCloseable संसाधनों को अपने-आप बंद करता है।
अब आप आरंभ से अंत तक BufferedReader की सहायता से इनपुट सुरक्षित रूप से पढ़ सकते हैं।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “स्ट्रीम सुरक्षित रूप से बंद करना” पाठ निःशुल्क है?
हाँ—“स्ट्रीम सुरक्षित रूप से बंद करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“स्ट्रीम सुरक्षित रूप से बंद करना” में मैं क्या सीखूँगा?
try-with-resources आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“स्ट्रीम सुरक्षित रूप से बंद करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- BufferedReader क्यों
- पंक्तियाँ पढ़ना
- इनपुट से संख्याओं का पार्सिंग
- स्ट्रीम सुरक्षित रूप से बंद करना