Let me first apologize if this question could sound perhaps sort of amateurish for the seasoned programmers among you, the thing is I\'ve been having many arguments about th
Stream is an abstract base class that represents a series of bytes.
MemoryStream is a stream of bytes held in memory, backed by an Array.
FileStream is a stream of bytes in a file, usually backed by a file handle somewhere on disk.
Text characters are themselves composed of bytes, and a single character can be multiple bytes, depending on the encoding. There are some standard classes that read and write text to different sources using a specific encoding.
TextWriter is an abstract base class for writing text characters to a destination.
StreamWriter writes text characters (converted to bytes) to a stream of bytes.StringWriter writes text characters to a string (via a StringBuilder).TextReader is an abstract base class for reading text characters from a source.
StreamReader reads text characters (converted from bytes) from a stream of bytes.StringReader reads text characters from a string.Stream, TextWriter, TextReader are all abstract base classes so they are never used directly but through an implementation like the ones described above. However you will see the base classes in method definitions so that different implementations can be used, including your own custom ones if necessary. Abstract classes are similar to interfaces but can actually define the logic for methods, which can be reused without every implementation repeating the same basic code.