C# Difference between StreamReader and FileStream

C# में FileStream और StreamReader दोनों का उपयोग फाइलों के साथ काम करने के लिए किया जाता है, लेकिन उनके काम करने का तरीका और उद्देश्य बिल्कुल अलग हैं। सरल शब्दों में कहें तो: FileStream "कच्चे डेटा" (Bytes) के लिए है, जबकि StreamReader "टेक्स्ट" (Characters) के लिए है।

1. FileStream (The Byte Specialist)

FileStream एक लो-लेवल क्लास है जो फाइल को Bytes (0s and 1s) के रूप में पढ़ती या लिखती है।
  • क्या करता है: यह सीधे ऑपरेटिंग सिस्टम के साथ फाइल खोलने, पढ़ने और लिखने का काम करता है।
  • डेटा टाइप: यह सिर्फ byte[] (बाइट ऐरे) के साथ काम करता है।
  • उपयोग: इमेज, वीडियो, ऑडियो, या किसी भी बाइनरी फाइल को हैंडल करने के लिए।
  • विशेषता: आप फाइल में किसी भी पोजीशन पर जा सकते हैं (Seeking)।
उदाहरण:

using (FileStream fs = new FileStream("image.jpg", FileMode.Open)) {
    // यहाँ डेटा बाइट्स के रूप में मिलेगा
}

2. StreamReader (The Text Specialist)

StreamReader एक हाई-लेवल क्लास है जो किसी स्ट्रीम (जैसे FileStream) के ऊपर बैठती है और बाइट्स को Characters/Strings में बदलती है।
  • क्या करता है: यह बाइट्स को लेता है और उन्हें आपकी पसंद के Encoding (जैसे UTF-8) के अनुसार टेक्स्ट में बदल देता है।
  • डेटा टाइप: यह string या char के साथ काम करता है।
  • उपयोग: .txt, .csv, या .log जैसी टेक्स्ट फाइलों को पढ़ने के लिए।
  • विशेषता: इसमें ReadLine() जैसे सुविधाजनक मेथड होते हैं।
उदाहरण:

using (StreamReader reader = new StreamReader("notes.txt")) {
    string line = reader.ReadLine(); // टेक्स्ट पढ़ना आसान है
}

मुख्य अंतर: एक नज़र में

विशेषता

FileStream

StreamReader

मुख्य फोकस

Raw Bytes (बाइनरी डेटा)

Character/Text (स्ट्रिंग डेटा)

लेवल

Low-level (सीधे फाइल एक्सेस)

High-level (स्ट्रीम के ऊपर रैपर)

Encoding

इसमें एन्कोडिंग की चिंता नहीं होती

यह Encoding (UTF-8, ASCII) हैंडल करता है

Random Access

फाइल में कहीं भी "Seek" कर सकते हैं

केवल आगे की ओर पढ़ सकते हैं (Sequential)

बेस्ट के लिए

.jpg, .exe, .mp3, .zip

.txt, .json, .xml, .csv

कब किसका उपयोग करें?

FileStream का उपयोग तब करें जब: 
1. आप Non-text फाइलों (इमेज, वीडियो) के साथ काम कर रहे हों। 
2. आपको फाइल के बीच में कहीं जाकर कुछ डेटा पढ़ना या बदलना हो (Random Access)। 
3. आप अपनी खुद की कस्टम बफरिंग या डेटा प्रोसेसिंग लॉजिक बनाना चाहते हों।

StreamReader का उपयोग तब करें जब: 
1. आपको कोई Text फाइल पढ़नी हो। 
2. आपको लाइन-बाय-लाइन डेटा प्रोसेस करना हो (ReadLine())। 
3. आप चाहते हैं कि C# खुद एन्कोडिंग (Special characters) का ध्यान रखे ताकि टेक्स्ट बिगड़े नहीं। 

असल में, StreamReader अंदरूनी रूप से एक FileStream का ही उपयोग करता है। आप अक्सर FileStream को फाइल खोलने के लिए इस्तेमाल करते हैं और फिर उसे StreamReader को थमा देते हैं ताकि आप टेक्स्ट आसानी से पढ़ सकें:
StreamReader reader = new StreamReader(new FileStream("data.txt", FileMode.Open));

टिप्पणियाँ

इस ब्लॉग से लोकप्रिय पोस्ट

Differences between in-process and out-of-process hosting models

Web Fundamental Concepts in Hindi for Beginners - FAQs with their Answers Part-1

Introduction to ASP.NET Core and Web Frameworks