This has been bugging me. I know Stream is an abstract class and therefore can't be instantiated but it has classes that are derived from it. Why is there a StreamReader class and a Stream.Read() method (and vice verse for StreamWriter and Stream.Write())? You can write to a text file using 3 million different methods and it's rather frustrating trying to get my head around all of these different types and methods in the System.IO namespace. I found questions and answers regarding the differences between the writer and reader objects or the derived stream objects themselves but nothing regarding this particular case.
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
- How to know full paths to DLL's from .csproj f
TextReader
(whichStreamReader
is derived from) works with strings.Stream
works with bytes. The conversion between text and bytes is performed by anEncoding
.Choose the right class based on whether the contents of your file text or binary.
It is important to understand the difference between text and bytes.
These two cases are used in different scenario
When you are using the stream class you can access the file for read and write. But when you use streamreader class you can use it to read only. This prevent the usage of file to be written. Sometimes This class is used for security purpose. e.g. for system files which are readonly.
A
StreamReader
is aTextReader
which means it is aStream
wrapper. ATextReader
will convert (or encode) Text data (string or char) to byte[] and write them down to the underlyingStream
.Looking at the difference between the two implementations, you can see that
StreamReader
derives fromTextReader
, which, as declared, deals with text instead of bytes. It seems to me as an abstraction for users who want to work with textual representation. Of course, the underlying implementation will need aStream
to consume such data, but will provide a level of abstraction for end users.