"हॅलो, अमिगो! आज आम्ही इनपुट/आउटपुट प्रवाहांशी परिचित होऊ . आम्ही काही दिवसांपूर्वी हा विषय निवडला होता, परंतु आज आम्ही त्याचा सखोल अभ्यास करू. इनपुट/आउटपुट प्रवाह 4 श्रेणींमध्ये विभागले गेले आहेत:"

1) प्रवाह त्यांच्या दिशेनुसार विभागले जातात: इनपुट प्रवाह आणि आउटपुट प्रवाह

२) प्रवाह त्यांच्या डेटा प्रकारानुसार विभागले जातात: जे बाइट्ससह कार्य करतात आणि जे वर्णांसह कार्य करतात .

येथे हे विभाग टेबलमध्ये दर्शविले आहेत:

इनपुट प्रवाह आउटपुट प्रवाह
बाइट्ससह कार्य करते इनपुटस्ट्रीम आउटपुटस्ट्रीम
पात्रांसह कार्य करते वाचक लेखक

जर एखादी वस्तू इनपुटस्ट्रीम इंटरफेस लागू करत असेल, तर ते अनुक्रमे बाइट्स वाचण्याच्या क्षमतेस समर्थन देते.

जर एखादी वस्तू आउटपुटस्ट्रीम इंटरफेस लागू करत असेल, तर ते त्यावर अनुक्रमे बाइट्स लिहिण्याच्या क्षमतेस समर्थन देते.

जर एखादी वस्तू रीडर इंटरफेस लागू करते, तर ते त्यातील अक्षरे (अक्षर) अनुक्रमे वाचण्याच्या क्षमतेस समर्थन देते.

जर एखादी वस्तू राइटर इंटरफेस लागू करत असेल, तर ते त्यावर अनुक्रमे वर्ण (अक्षर) लिहिण्याच्या क्षमतेस समर्थन देते.

इनपुट/आउटपुट प्रवाह - १

आउटपुट प्रवाह हा प्रिंटरसारखा असतो. आम्ही प्रिंटरवर दस्तऐवज आउटपुट करू शकतो. आम्ही आउटपुट प्रवाहात डेटा आउटपुट करू शकतो.

त्याच्या भागासाठी, इनपुट प्रवाहाची तुलना स्कॅनरशी किंवा कदाचित इलेक्ट्रिकल आउटलेटशी केली जाऊ शकते. स्कॅनरच्या साह्याने आम्ही कागदपत्रे आमच्या संगणकावर आणू शकतो. किंवा आम्ही इलेक्ट्रिकल आउटलेटमध्ये प्लग इन करू शकतो आणि त्यातून वीज घेऊ शकतो. आम्ही इनपुट प्रवाहातून डेटा प्राप्त करू शकतो.

"ते कुठे वापरले जातात?"

"हे वर्ग Java मध्ये सर्वत्र वापरले जातात. आमचा परिचित मित्र System.in हे सिस्टीम क्लासमध्ये नाव दिलेले एक स्थिर इनपुटस्ट्रीम व्हेरिएबल आहे ."

"गंभीरपणे?! म्हणून एवढा वेळ मी InputStream वापरत आहे आणि मला ते कळलेही नाही. System.out देखील एक प्रवाह आहे का?"

"होय, System.out हे सिस्टीम वर्गातील स्थिर प्रिंटस्ट्रीम ( आउटपुटस्ट्रीमचे वंशज ) व्हेरिएबल आहे."

"तुला सांगायचे आहे की मी नेहमीच प्रवाह वापरत आलो आणि मला ते माहितही नव्हते?"

"होय, आणि ते आम्हाला सांगते की हे प्रवाह किती सोयीस्कर आहेत. तुम्ही फक्त एक घ्या आणि वापरा."

"परंतु तुम्ही System.in बद्दल असे म्हणू शकत नाही. आम्हाला त्यात सतत BufferedReader किंवा InputStreamReader जोडावे लागले."

"ते खरे आहे. पण त्यामागे कारणेही होती."

तेथे बरेच डेटा प्रकार आहेत आणि त्यांच्यासह कार्य करण्याचे अनेक मार्ग आहेत. त्यामुळे मानक I/O वर्गांची संख्या खूप झपाट्याने वाढली, जरी त्यांनी सर्व काही जवळजवळ सारखेच केले. ही गुंतागुंत टाळण्यासाठी, जावा डेव्हलपर्सनी अमूर्ततेचे तत्त्व वापरले आणि वर्गांना अनेक लहान भागांमध्ये विभागले.

परंतु आपण हे भाग एका सुसंगत पद्धतीने कनेक्ट करू शकता आणि आपल्याला आवश्यक असल्यास अतिशय जटिल कार्यक्षमता मिळवू शकता. हे उदाहरण पहा:

कन्सोलवर स्ट्रिंग आउटपुट करा
System.out.println("Hello");
कन्सोल आउटपुट प्रवाह वेगळ्या व्हेरिएबलमध्ये संग्रहित करा.
प्रवाहावर स्ट्रिंग आउटपुट करा.
PrintStream console = System.out;
console.println("Hello");
मेमरीमध्ये डायनॅमिक (विस्तारित) बाइट अॅरे तयार करा.
ते नवीन आउटपुट स्ट्रीमशी कनेक्ट करा (प्रिंटस्ट्रीम ऑब्जेक्ट).
प्रवाहावर स्ट्रिंग आउटपुट करा.
ByteArrayOutputStream stream = new ByteArrayOutputStream();
PrintStream console = new PrintStream(stream);
console.println("Hello");

"प्रामाणिकपणे, हे लेगो सेटसारखे आहे. फक्त मला हे स्पष्ट नाही की यापैकी कोणताही कोड काय करत आहे."

"त्याची तू आता काळजी करू नकोस. सर्व काही आपापल्या वेळेत."

तुम्ही हे लक्षात ठेवावे अशी माझी इच्छा आहे: जर एखाद्या वर्गाने आउटपुटस्ट्रीम इंटरफेस लागू केला, तर तुम्ही त्यावर बाइट्स लिहू शकता. जवळजवळ तुम्ही कन्सोलमध्ये डेटा आउटपुट करता तसाच. ते काय करते ते त्याचा व्यवसाय आहे. आमच्या "लेगो किट" सह, आम्ही प्रत्येक वैयक्तिक भागाच्या उद्देशाकडे लक्ष देत नाही. आम्हाला या वस्तुस्थितीची काळजी आहे की भागांची मोठी निवड आम्हाला अशा छान गोष्टी तयार करू देते.

"ठीक आहे. मग कुठून सुरुवात करू?"