यहां अन्य उत्तरों पर थोड़ा विस्तार करने के लिए, और बहुत से उदाहरण कोड के बारे में बताने में मदद करें, जिनके बारे में आप बहुत बार देख चुके हैं, अधिकांश समय आप किसी स्ट्रीम में सीधे नहीं पढ़ते और लिखते हैं। डेटा को स्थानांतरित करने के लिए स्ट्रीम निम्न-स्तरीय साधन हैं।
आप देखेंगे कि पढ़ने और लिखने के कार्य सभी बाइट ओरिएंटेड हैं, जैसे राइटबाइट ()। पूर्णांक, तार आदि के साथ काम करने के लिए कोई कार्य नहीं हैं। यह धारा को बहुत सामान्य-उद्देश्य बनाता है, लेकिन अगर आप कहें तो पाठ को स्थानांतरित करना चाहते हैं।
हालाँकि, .NET उन कक्षाओं को प्रदान करता है जो मूल प्रकार और निम्न-स्तरीय स्ट्रीम इंटरफ़ेस के बीच परिवर्तित होते हैं, और डेटा को आपके लिए स्ट्रीम से या में स्थानांतरित करते हैं। कुछ उल्लेखनीय ऐसी कक्षाएं हैं:
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
इनका उपयोग करने के लिए, पहले आप अपनी स्ट्रीम का अधिग्रहण करते हैं, फिर आप उपरोक्त वर्गों में से एक बनाते हैं और इसे स्ट्रीम के साथ जोड़ते हैं। उदाहरण के लिए
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReader और StreamWriter मूल प्रकारों और उनके स्ट्रिंग अभ्यावेदन के बीच परिवर्तित होते हैं और फिर स्ट्रिंग को बाइट्स के रूप में स्ट्रीम से और स्थानांतरित करते हैं। इसलिए
myStreamWriter.Write(123);
धारा में "123" (तीन अक्षर '1', '2' तो '3') लिखेंगे। यदि आप पाठ फ़ाइलों (उदाहरण के लिए html) के साथ काम कर रहे हैं, तो StreamReader और StreamWriter वे कक्षाएं हैं जिनका आप उपयोग करेंगे।
जहाँ तक
myBinaryWriter.Write(123);
32-बिट पूर्णांक मान 123 (0x7B, 0x00, 0x00, 0x00) का प्रतिनिधित्व करने वाले चार बाइट्स लिखेंगे। यदि आप बाइनरी फ़ाइलों या नेटवर्क प्रोटोकॉल के साथ काम कर रहे हैं तो बाइनरी राइडर और बाइनरीविटर आपके द्वारा उपयोग किए जा सकते हैं। (यदि आप नेटवर्क या अन्य प्रणालियों के साथ डेटा का आदान-प्रदान कर रहे हैं, तो आपको धीरज रखने की आवश्यकता है , लेकिन यह एक और पोस्ट है।)