"हॅलो, अमिगो! आता मी तुम्हाला दोन इंटरफेसबद्दल सांगेन: इनपुटस्ट्रीम आणि आउटपुटस्ट्रीम . ते अमूर्त वर्ग म्हणून घोषित केले जातात, परंतु जर तुम्ही खोलवर शोधले तर तुम्हाला ते मूलत: इंटरफेस असल्याचे दिसून येईल . त्यांच्या जवळजवळ सर्व पद्धती अमूर्त आहेत, वगळता काही क्षुल्लक पद्धती. त्या बऱ्याचशा " बॉडीगार्ड " सारख्या आहेत ज्याचा आपण आधी विचार केला होता.

हे अतिशय मनोरंजक इंटरफेस आहेत. आत्तासाठी, मी जाणूनबुजून त्यांना इंटरफेस कॉल करणार आहे , त्यामुळे आम्हाला त्यांची गरज का आहे हे तुम्हाला समजेल. आणि मग ते प्रत्यक्षात अमूर्त वर्ग का आहेत याबद्दल आपण बोलू.

"ठीक आहे. मग हे इंटरफेस काय आहेत?"

"मी तुम्हाला पुढची अडचण न करता सांगेन."

जावामध्ये ही मनोरंजक गोष्ट आहे ज्याला " स्ट्रीम " म्हणतात. प्रवाह ही एक अतिशय साधी संस्था आहे. आणि त्याची साधेपणा ही डेटाची देवाणघेवाण करण्याच्या अत्यंत शक्तिशाली मार्गाची गुरुकिल्ली आहे. प्रवाहाचे दोन प्रकार आहेत: वाचनासाठी प्रवाह आणि लेखनासाठी प्रवाह .

जसे आपण आधीच अंदाज लावला आहे, आपण लेखनासाठी प्रवाहात डेटा लिहू शकता . यासाठी लिहिण्याची पद्धत आहे . तुम्ही वाचनासाठी प्रवाहातील डेटा वाचू शकता . यासाठी read () पद्धत आहे .

InputStream  हा प्रवाहाचा इंटरफेस आहे जो वाचनास समर्थन देतो. हे खालील क्षमता परिभाषित करते: "माझ्याकडून बाइट वाचले जाऊ शकतात".

त्याचप्रमाणे, आउटपुटस्ट्रीम , आउटपुटस्ट्रीम हे लेखनाला समर्थन देणार्‍या प्रवाहासाठी इंटरफेस आहे. हे खालील क्षमता परिभाषित करते: «बाइट्स मला लिहिता येतात».

"बस एवढेच?"

"बऱ्याचपैकी. पण संपूर्ण मुद्दा असा आहे की Java मध्ये InputStream आणि OutputStream सोबत काम करू शकणारे अनेक वर्ग आहेत . उदाहरणार्थ, तुम्हाला डिस्कवरून फाइल वाचायची आहे आणि त्यातील मजकूर स्क्रीनवर दाखवायचा आहे. काहीही सोपे असू शकत नाही."

डिस्कवरील फाइलमधील डेटा वाचण्यासाठी, आमच्याकडे विशेष फाइलइनपुटस्ट्रीम वर्ग आहे, जो इनपुटस्ट्रीम इंटरफेस लागू करतो. तुम्हाला हा डेटा दुसऱ्या फाईलमध्ये लिहायचा आहे का? यासाठी, आमच्याकडे FileOutputStream क्लास आहे, जो आउटपुटस्ट्रीम इंटरफेस लागू करतो. एका फाइलमधून दुसऱ्या फाइलमध्ये डेटा कॉपी करण्यासाठी तुम्हाला काय करावे लागेल हे खालील कोड दाखवते.

कोड
public static void main(String[] args) throws IOException
{
 InputStream inStream = new FileInputStream("c:/source.txt");
 OutputStream outStream = new FileOutputStream("c:/result.txt");

 while (inStream.available() > 0)
 {
  int data = inStream.read(); //read one byte from the input stream
  outStream.write(data); //write that byte to the other stream.
 }

 inStream.close(); //close the streams
 outStream.close();
}

कल्पना करा की आम्ही एक वर्ग लिहिला आहे आणि  त्यात इनपुटस्ट्रीम  आणि  आउटपुटस्ट्रीम क्षमता जोडल्या आहेत.

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

"कदाचित उदाहरण?"

"नक्की."

कोड वर्णन
class MyClass
{
private ArrayList<Integer> list;
}
साधेपणासाठी, कल्पना करा की आमच्या वर्गात एक ऑब्जेक्ट आहे, एक ArrayList ज्यामध्ये पूर्णांक आहेत.

आता आपण त्यात वाचन आणि लेखन पद्धती जोडू

कोड वर्णन
class MyClass
{
private ArrayList<Integer> list;
public void write(int data)
{
list.add(data);
}
public int read()
{
int first = list.get(0);
list.remove(0);
return first;
}

public int available()
{
return list.size();
}
}
आता आमचा वर्ग वाचण्याची पद्धत लागू करतो, ज्यामुळे यादीतील संपूर्ण सामग्री क्रमाने वाचणे शक्य होते .

आणि लेखन पद्धत, जी तुम्हाला आमच्या सूचीमध्ये मूल्ये लिहू देते.

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

"हो, मला समजले. मग अशा ऑब्जेक्टचा मजकूर फाईलमध्ये कसा सेव्ह कराल?"

"मी तुम्हाला एक उदाहरण देतो:"

फाइलवर मायक्लास ऑब्जेक्ट लिहा
public static void main(String[] args)
{
 MyClass myObject = new MyClass();
 OutputStream outStream = new FileOutputStream ("c:/my-object-data.txt");

 while (myObject.available() > 0)
 {
  int data = myObject.read(); //read one int from the input stream
  outStream.write(data); //write that int to the other stream.
 }

 outStream.close();
}
फाइलमधून मायक्लास ऑब्जेक्ट वाचा
public static void main(String[] args)
{
 InputStream inStream = new FileInputStream("c:/my-object-data.txt");
 MyClass myObject = new MyClass();

 while (inStream.available() > 0)
 {
  int data = inStream.read(); //read one int from the input stream
  myObject.write(data); //write that int to the other stream.
 }

 inStream.close(); //close the streams
}

"होली मोली! हे खरोखर InputStream/OutputStream सह काम करण्यासारखे आहे. प्रवाह गोड आहेत!"

"आणि मग काही!"