C# Stream – Classes

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

C# Stream: C# Program I/O का काम Streams के माध्‍यम से करता है। Stream एक “Chunk of Data” को Represent करता है जो कि Source से Destination तक Flow होता है। Stream हमें Sequence of Bytes के साथ Interact करने का एक Common तरीका Provide करता है, जिसे किसी भी Input/Output Device (File, Network Connection, Printer, etc…) पर Data को Store करने के लिए Use किया जा सकता है।

यानी हमें अलग-अलग Devices के लिए Data के Flow को Handle करने के लिए अलग-अलग तरीकों को Use करने की जरूरत नहीं होती। बल्कि हम समान तरीके का प्रयोग करके किसी Network Connection या Printer पर भी Data को ठीक उसी तरीके Store कर सकते है, जिस तरह से किसी Disk Drive File में करते हैं।

Stream हमेंशा किसी ना किसी Physical I/O System के माध्‍यम से किसी Physical Device से Linked रहता है और सभी Devices के लिए Common रूप से Behave करता है, फिर भले ही वह Device कोई Printer हो, Network Connection हो, हमारे Computer System का Hard Disk Drive हो या हमारे Computer का Monitor यानी Screen हो, जिसे Console भी कहते हैं।

यानी हमने जिस तरह से Console.WriteLine() Statement Use करके Text Content को अपने Computer के Console पर Write यानी Display किया है, उसी तरह से हम किसी भी अन्‍य Device जैसे कि Printer, Network Connection, Hard Disk File आदि में भी Data को Write यानी Store कर सकते हैं और इन विभिन्न प्रकार की Devices पर Data Write करने के लिए हमें किसी अन्‍य Mechanism को Use करने की जरूरत नहीं होती।

Byte Streams and Character Streams

Lowest Level पर समझें तो सभी C# I/O Bytes पर Operate होते हैं। क्योंकि सभी Devices Byte Oriented (8-Bit Pattern of Electrical Signals) होते हैं। जबकि हम Human Beings सामान्‍यत: Character Data का प्रयोग करते हुए Communication करते हैं। इसलिए Byte तथा Character Orientation में अन्तर हो जाता है क्योंकि Byte हमेंशा 8-Bit Patterns होते हैं, जबकि C# में char Type भी 16-Bit Pattern का होता है क्योंकि C# Unicode Supported Form में Character को Represent करता है।

हालांकि यदि हम ASCII Character Set Use करते हैं, तो char को byte में Convert करना आसान होता है, क्योंकि उस स्थिति में हम char Type के High-Order 8-Bit Pattern को Ignore कर सकते हैं। लेकिन Unicode Characters के साथ हम ऐसा नहीं कर सकते, जिन्हें Represent होने के लिए हमेंशा 16-Bit Patterns की जरूरत होती है।

अत: Byte Stream कभी भी Perfect तरीके से Character Based I/O Handling के लिए उपयुक्त नहीं होते। इस समस्या के समाधान के रूप में .NET Framework हमें कई ऐसी Classes Provide करता है, जिनका प्रयोग करके हम किसी Byte Stream को Character Stream में Convert कर सकते हैं। यानी byte to charchar to byte Conversion कर सकते हैं, जो कि सामान्‍यत: Automatically हो जाता है।

Predefined Streams

.NET Framework में Console.In, Console.OutConsole.Error नाम की तीन Predefined Streams हैं, जिन्हे System Namespace में Define किया गया है। Console.Out हमारे Standard Output Device यानी Screen या Console को Represent करता है। इसलिए जब हम Console.WriteLine() Statement Use करते हैं, तो इस Method में Specified हमारा Text Automatically Console.Out पर Send हो जाता है।

इसी तरह से Console.In Standard Input Device यानी हमारे Computer System के Keyboard को Represent करता है। जबकि Console.Error Standard Error Stream को Represent करता है जो कि Default रूप से Console यानी हमारा Screen या Monitor ही होता है।

C# Stream Classes

.NET Framework में Byte व Character दोनों के लिए Stream Classes Defined हैं। फिर भी Character Stream Classes वास्तव में Underlying Byte Stream Classes की Wrapper मात्र हैं, जो Internally Automatic byte to charchar to byte Conversion पर आधारित हैं। अत: हालांकि Character Streams Logically हमें अलग मालूम पडती हैं, लेकिन Internally ये Byte Stream पर ही आधारित हैं।

विभिन्न Core Stream Classes को System.IO Namespace में ही Define किया गया है। इसलिए Stream Handling के लिए भी हमें इसी Namespace को अपने Program में using Directive का प्रयोग करते हुए Use करना जरूरी होता है।

हालांकि हमने बहुत सारे Programs में Console Class को Use किया है लेकिन Console Class को Use करते समय हमने System.IO Namespace को Use नहीं किया था, क्योंकि Console Class हालांकि Stream Based Class है, लेकिन इसे System Namespace में ही Define किया गया है।

Stream Class

System.IO.Steram .NET Framework I/O की Core Stream Class है, जो कि एक Byte Stream को Represent करता है और यही Class अन्‍य सभी Stream Classes की Base Class है। साथ ही ये एक Abstract Class है। इसलिए इसे Directly Instantiate नहीं किया जा सकता।

Stream Class बहुत सारे Standard Stream Operations को Perform करने के लिए विभिन्न प्रकार के Methods Define करता है। जिनमें से ज्यादातर Methods Error की स्थिति में एक IOException Trigger करते हैं। जबकि Invalid Input या Output अथवा Invalid Read/Write Operation Perform होने पर NotSupportedException Trigger करते हैं। इनके अलावा भी कई तरह के Exceptions Trigger हो सकते हैं, जो कि पूरी तरह से Use किए जाने वाले Method पर Depend होते हैं।

void Close() Method

ये Method Stream को Close करता है।

void Flush() Method

ये Method Stream के Content को Physical Device पर Write करता है।

void ReadByte() Method

ये Method Next Available Byte को Represent करने वाला एक Integer Return करता है जबकि File का अन्त प्राप्त होने पर ये Method -1 मान Return करता है।

void Read(Byte[] buffer, int offset, int count) Method

ये Method buffer के अन्दर offset के रूप में Specified Character के बाद से count में Specified मान के बराबर Characters को Read करता है और Successfully Run होने की स्थिति में Read किए गए कुल Bytes की संख्‍या Return करता है।

void Seek(long offset, SeakOrigin origin) Method

ये Method Stream में Origin के रूप में Specified मान से offset के रूप में Specified मान पर Current Position को Set करता है

void WriteByte(byte value) Method

ये Method एक Single Byte को Output Stream पर Write करता है।

void Write(byte[] buffer, int offset, int count) Method

ये Method buffer Array से buffer[offset] से शुरू करके count Bytes के मान के बराबर तक के Bytes को Return करता है।

हम देख सकते हैं कि Stream Class में Defined Methods को Use करके हम Data को Read या Write कर सकते हैं। लेकिन सभी Streams इन दोनों Operations को Support नहीं करते। क्योंकि कुछ Streams Read-Only Mode में Open होते हैं, जबकि कुछ Steams Write-Only Mode में। साथ ही सभी Streams Seek() Method द्वारा Current Position Request को भी Support नहीं करते।

Stream की Capabilities का पता लगाने के लिए हम Stream की CanRead, CanWrite और CanSeek Properties को Check कर सकते हैं। इनके अलावा हम LengthPosition Properties का प्रयोग करके Stream की Length व Stream की Current Position का पता लगा सकते हैं। साथ ही ReadTimeoutWriteTimeout Properties का प्रयोग करके Reading या Writing के Time को निश्चित कर सकते हैं। इन सभी Properties में Position, ReadTimeout WriteTimeout Properties Read/Write Properties हैं, जबकि अन्‍य सभी Properties Read-Only Properties हैं।

Byte Stream Class

Stream Class से कई Byte Stream Classes को Drive किया गया है, जो कि System.IO Namespace में Defined हैं। ये Classes निम्नानुसार हैं:

BufferedStream Class

ये Class एक Byte Stream को Wrap करता है और Buffering को Add करता है। Buffering Use करने के कारण हमें Performance Enhancement मिलता है।

FileStream Class

इस Byte Stream Class को File I/O के लिए Design किया गया है।

MemoryStream Class

ये Byte Stream Class Memory को Storage के रूप में Use करता है।

UnmanagedMemoryStream Class

ये Byte Stream Class Unmanaged Memory को Storage के रूप में Use करता है।

इनके अलावा बहुत सारी और Byte Stream Classes को .NET Framework द्वारा Support किया जाता है, जो कि Compressed Files, Sockets व Pipes पर Data Read/Write करने के लिए Support Provide करते हैं। लेकिन फिर भी ज्यादातर Applications के लिए .NET द्वारा Provided Built-In Streams Sufficient हैं।

Character Stream Wrapper Classes

Character Stream Create करने के लिए Byte Stream को किसी न किसी Character Stream Wrapper में Wrap किया गया है। Character Stream Hierarchy के Top में TextReader TextWriter नाम की Abstract Class है। TextReader Input को Handle करता है, जबकि TextWriter Output को Handle करता है।

इन दोनों Abstract Classes में जिन Methods को Define किया गया है, वे इनकी सभी Derived Classes में Available रहते हैं। इसलिए ये बहुत कम I/O Functions को Define करते हैं जो कि सभी Character Streams में होते हैं।

TextReader Stream में Defined Methods Error की स्थिति में IOException Throw करते हैं। जबकि कुछ Methods अन्‍य प्रकार के Exceptions भी Throw कर सकते हैं। इस Class में Defined ReadLine() Method सबसे ज्यादा Use किया जाने वाला Method है जो कि Input Device से पूरी एक Line के Texts को Read करता है और string Object के रूप में Return करता है। साथ ही TextReader Class में Close() Method को भी Define किया गया है जो कि किसी Stream द्वारा Occupied Resources को Free करने का काम करता है। इस Class में Defined विभिन्न Methods निम्नानुसार हैं:

int Peek() Method

ये Method Input Stream से Next Character को Retrieve करता है लेकिन Character को Remove नहीं करता। जबकि यदि Read करने के लिए कोई Character Available न हो, तो ये Method -1 Return करता है।

int Read() Method

ये Method Input Stream से Next Character के Integer Representation को Return करता है। जबकि यदि End of File पर पहुंच जाता है, तो -1 Return करता है।

int Read(char[] buffer, int index, int count) Method

ये Method buffer से buffer[count] Position से count के बराबर Characters Read करता है और Successfully Read किए गए कुल Characters की संख्‍या Return करता है।

int ReadBlock(char[] buffer, int index, int count) Method

ये Method buffer से buffer[count] Position से count के बराबर Characters Read करता है और Successfully Read किए गए कुल Characters की संख्‍या Return करता है।

int ReadLine() Method

ये Method Input Stream से पूरी Text Line को Read करता है और एक string Object के रूप में Return करता है। जबकि यदि End of File को Read करने की कोशिश करता है, तो Return Value के रूप में null Return करता है।

int ReadToEnd() Method

ये Method Stream से सभी बचे हुए Characters को Read करता है और उन्हें एक string Object के रूप में Return करता है।

इन सभी Methods द्वारा तब IOException Throw होता है, जब Writing का काम होता है। जबकि TextWriter Class में भी Close() व Flush() Methods को Define किया गया है, जो कि निम्नानुसार Virtual Methods होते हैं:

virtual void Close()
virtual void Flush()

Flush() Method Output Buffer में बचे हुए सभी Characters को Physical Media पर Write कर देता है। जबकि Close() Method Writer को Close करके उसके द्वारा Occupied Resources को Free कर देता है।

TextReader व TextWriter Classes को कई Character Based Stream Classes द्वारा Implement किया जाता है। अत: ये Streams TextReader व TextWriter Classes द्वारा Provided विभिन्न Properties व Methods को Use करने के लिए Available करवाते हैं। इन Classes के आधार पर Implemented कुछ Derived Classes निम्नानुसार हैं:

StreamReader Class

इस Class का Object Byte Stream से Characters Read करता है। ये Class Byte Input Stream को Wrap करता है।

StreamWriter Class

इस Class का Object Byte Stream में Characters Write करता है। ये Class Byte Output Stream को Wrap करता है।

StringReader Class

इस Class का Object String से Characters Read करता है।

StringWriter Class

इस Class का Object String में Characters Write करता है।

Binary Streams

Byte व Character Streams के अलावा .NET Framework हमें BinaryReaderBinaryWriter नाम की दो Binary Stream Classes भी Provide करवाता है, जिन्हें Directly Binary Data को Read या Write करने के लिए Use किया जा सकता है। इन Classes का प्रयोग Binary Files I/O के लिए किया जाता है।

C# File - Class
C# Console.WriteLine | C# Console.ReadLine

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।