1. OutputStreamवर्ग

आम्ही नुकतेच इनपुट प्रवाह एक्सप्लोर केले. आउटपुट प्रवाहांबद्दल बोलण्याची वेळ आली आहे.

वर्ग OutputStreamहा सर्व वर्गांसाठी पालक वर्ग आहे जो बाइट आउटपुटला समर्थन देतो. हा एक अमूर्त वर्ग आहे जो स्वतः काहीही करत नाही, परंतु प्रत्येक प्रसंगासाठी त्याचे वंशज वर्ग आहेत.

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

पण परत वर्गात OutputStream. या वर्गात अशा पद्धती आहेत ज्या त्याच्या सर्व वंशजांनी अंमलात आणल्या पाहिजेत. येथे मुख्य आहेत:

पद्धती वर्णन
void write(int b)
intप्रवाहावर एक बाइट (नाही) लिहितो .
void write(byte[] buffer)
प्रवाहावर बाइट्सचा अ‍ॅरे लिहितो
void write(byte[] buffer, off, len)
प्रवाहावर बाइट्सच्या अॅरेचा भाग लिहितो
void flush()
बफरमध्ये संचयित केलेला सर्व डेटा प्रवाहावर लिहितो
void close()
प्रवाह बंद करतो

जेव्हा तुम्ही वारसा मिळालेल्या वर्गाचा ऑब्जेक्ट तयार करता InputStream, तेव्हा तुम्ही सामान्यतः स्रोत ऑब्जेक्ट निर्दिष्ट करता ज्यावरून InputStreamडेटा वाचतो. जेव्हा तुम्ही वारसा मिळालेल्या वर्गाचा ऑब्जेक्ट तयार करता OutputStream, तेव्हा तुम्ही सामान्यतः लक्ष्य ऑब्जेक्ट किंवा स्ट्रीम देखील निर्दिष्ट करता ज्यावर डेटा लिहिला जाईल.

चला वर्गाच्या सर्व पद्धती थोडक्यात पाहू OutputStream:

write(int b)पद्धत

intही पद्धत आउटपुट प्रवाहावर एक बाइट (नाही) लिहिते . पास केलेले मूल्य बाइटवर टाकले जाते आणि int चे पहिले तीन बाइट टाकून दिले जातात.

write(byte[] buffer)पद्धत

आउटपुट प्रवाहात बाइट्सचा दिलेला अॅरे लिहितो. बस एवढेच.

write(byte[] buffer, int offset, int length)पद्धत

आउटपुट प्रवाहात पास केलेल्या बाइट्सच्या अॅरेचा एक भाग लिहितो. ऑफसेट व्हेरिएबल अॅरेच्या पहिल्या घटकाची अनुक्रमणिका दर्शविते आणि lengthलिहिल्या जाणार्‍या उपसेटची लांबी आहे.

flush()पद्धत

flush()सध्याच्या प्रवाहात संभाव्य बफर केलेला कोणताही डेटा लक्ष्य प्रवाहावर लिहिण्यास भाग पाडण्यासाठी पद्धत वापरली जाते . बफरिंग आणि/किंवा साखळीमध्ये व्यवस्था केलेल्या एकाधिक प्रवाह वस्तू वापरताना हे संबंधित आहे.

close()पद्धत

लक्ष्य ऑब्जेक्टवर कोणताही अलिखित डेटा लिहितो. close()तुम्ही ब्लॉक वापरल्यास पद्धत कॉल करण्याची गरज नाही try-with-resources.

फाइल कॉपी करण्याचे उदाहरण

कोड नोंद
String src = "c:\\projects\\log.txt";
String dest = "c:\\projects\\copy.txt";

try(FileInputStream input = new FileInputStream(src);
FileOutputStream output = new FileOutputStream(dest))
{
   byte[] buffer = new byte[65536]; // 64Kb
   while (input.available() > 0)
   {
      int real = input.read(buffer);
      output.write(buffer, 0, real);
   }
}



InputStreamफाइलमधून वाचण्यासाठी
OutputStreamफाईल

बफरवर लिहा ज्यामध्ये आम्ही डेटा वाचू
जोपर्यंत स्ट्रीममध्ये डेटा आहे तोपर्यंत

बफरमध्ये डेटा वाचा
बफरमधून दुसऱ्या प्रवाहात डेटा लिहा

2. Writerवर्ग

वर्ग Writerअगदी वर्गासारखाच आहे OutputStream, परंतु पुन्हा एकदा फक्त एक फरक: तो charबाइट्सऐवजी ( ) वर्णांसह कार्य करतो.

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

वर्गाच्या पद्धती Writer(आणि त्याचे सर्व वंशज वर्ग):

पद्धती वर्णन
void write(int b)
intप्रवाहावर एक वर्ण (नाही) लिहितो .
void write(char[] buffer)
प्रवाहावर वर्णांचा अ‍ॅरे लिहितो
void write(char[] buffer, off, len)
प्रवाहात वर्णांच्या अॅरेचा भाग लिहितो
void write(String str)
प्रवाहाला स्ट्रिंग लिहितो
void write(String str, off, len)
प्रवाहावर स्ट्रिंगचा भाग लिहितो
void flush()
बफरमध्ये संचयित केलेला सर्व डेटा प्रवाहावर लिहितो
void close()
प्रवाह बंद करतो

पद्धती वर्गाच्या पद्धतींसारख्याच आहेत OutputStream, परंतु त्या बाइट्सऐवजी वर्णांसह कार्य करतात.

पद्धतींचे वर्णन:

write(int b)पद्धत

ही पद्धत आउटपुट स्ट्रीमवर एकच वर्ण ( char— नाही ) लिहिते. intपास केलेले मूल्य a वर टाकले जाते charआणि पहिले दोन बाइट टाकून दिले जातात.

write(char[] buffer)पद्धत

आउटपुट प्रवाहात वर्णांचा दिलेला अॅरे लिहितो.

write(char[] buffer, int offset, int length)पद्धत

आउटपुट स्ट्रीममध्ये पास केलेल्या वर्णांच्या अॅरेचा एक भाग लिहितो. व्हेरिएबल offsetअ‍ॅरेच्या पहिल्या घटकाची अनुक्रमणिका दर्शवते आणि lengthलिहिल्या जाणार्‍या उपसंचाची लांबी आहे.

write(String str)पद्धत

दिलेली स्ट्रिंग आउटपुट स्ट्रीमवर लिहिते.

write(String str, int offset, int length)पद्धत

दिलेल्या स्ट्रिंगचा एक भाग आउटपुट स्ट्रीमवर लिहितो: स्ट्रिंग अक्षरांच्या अॅरेमध्ये रूपांतरित होते. व्हेरिएबल offsetअ‍ॅरेच्या पहिल्या घटकाची अनुक्रमणिका दर्शवते आणि lengthलिहिल्या जाणार्‍या उपसंचाची लांबी आहे.

flush()पद्धत

flush()सध्याच्या प्रवाहात संभाव्य बफर केलेला कोणताही डेटा लक्ष्य प्रवाहावर लिहिण्यास भाग पाडण्यासाठी पद्धत वापरली जाते . बफरिंग आणि/किंवा साखळीमध्ये व्यवस्था केलेल्या एकाधिक प्रवाह वस्तू वापरताना हे संबंधित आहे.

close()पद्धत

लक्ष्य ऑब्जेक्टवर कोणताही अलिखित डेटा लिहितो. close()तुम्ही ब्लॉक वापरल्यास पद्धत कॉल करण्याची गरज नाही try-with-resources.

मजकूर फाइल कॉपी करणाऱ्या प्रोग्रामचे उदाहरण:

कोड नोंद
String src = "c:\\projects\\log.txt";
String dest = "c:\\projects\\copy.txt";

try(FileReader reader = new FileReader(src);
FileWriter writer = new FileWriter(dest))
{
   char[] buffer = new char[65536]; // 128Kb
   while (reader.ready())
   {
      int real = reader.read(buffer);
      writer.write(buffer, 0, real);
   }
}



Readerफाइलमधून वाचण्यासाठी
Writerफाईल बफरवर लिहिण्यासाठी

ज्यामध्ये आम्ही डेटा वाचू
जोपर्यंत स्ट्रीममध्ये डेटा आहे तोपर्यंत

बफरमध्ये डेटा वाचा
बफरमधून दुसऱ्या प्रवाहावर डेटा लिहा

StringWriterवर्ग

आणखी एक मनोरंजक वर्ग आहे जो Writerवर्गाचा वारसा घेतो: त्याला म्हणतात StringWriter. त्यात एक परिवर्तनीय स्ट्रिंग आहे - एक StringBufferऑब्जेक्ट. आणि प्रत्येक वेळी जेव्हा तुम्ही ऑब्जेक्टवर काहीतरी "लिहता" StringWriterतेव्हा मजकूर त्याच्या अंतर्गत बफरमध्ये जोडला जातो.

उदाहरण:

कोड नोंद
StringWriter writer = new StringWriter();
writer.write("Hello");
writer.write(String.valueOf(123));

String result = writer.toString();
टार्गेट कॅरेक्टर स्ट्रीम ( StringWriter) तयार केला जातो
एक स्ट्रिंग बफरला लिहिलेली असते StringWriter
A स्ट्रिंगच्या आतील बफरवर एक स्ट्रिंग लिहीली जाते StringWriter

ऑब्जेक्टची सामग्री एका स्ट्रिंगमध्ये रूपांतरित करणे

या प्रकरणात, StringWriterवर्ग मूलत: वर्गावर एक आवरण आहे StringBuffer, परंतु StringWriterवर्ग हा प्रवाह वर्गाचा वंशज आहे Writerआणि तो प्रवाह वस्तूंच्या साखळ्यांमध्ये वापरला जाऊ शकतो. सराव मध्ये ही एक अतिशय उपयुक्त मालमत्ता आहे.