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
अंदर बफर को लिखा जाता हैStringWriter

इस मामले में, StringWriterवर्ग अनिवार्य रूप से वर्ग के ऊपर एक आवरण है StringBuffer, लेकिन StringWriterवर्ग धारा वर्ग का वंशज है Writer, और इसका उपयोग धारा वस्तुओं की श्रृंखला में किया जा सकता है। यह व्यवहार में एक बहुत ही उपयोगी संपत्ति है।