ここで他の答えを少し拡張し、点在する多くのサンプルコードの説明に役立てます。ほとんどの場合、直接ストリームを読み書きすることはありません。ストリームは、データを転送するための低レベルの手段です。
読み書き用の関数はすべてバイト指向であることがわかります(例:WriteByte())。整数、文字列などを処理するための関数はありません。これにより、ストリームは非常に汎用的なものになりますが、たとえば、テキストを転送するだけの場合は、操作が簡単ではなくなります。
ただし、.NETは、ネイティブタイプと低レベルストリームインターフェイスの間で変換し、ストリームとの間でデータを転送するクラスを提供します。注目すべきそのようなクラスは次のとおりです。
StreamWriter // Badly named. Should be TextWriter.
StreamReader // Badly named. Should be TextReader.
BinaryWriter
BinaryReader
これらを使用するには、最初にストリームを取得してから、上記のクラスの1つを作成し、それをストリームに関連付けます。例えば
MemoryStream memoryStream = new MemoryStream();
StreamWriter myStreamWriter = new StreamWriter(memoryStream);
StreamReaderとStreamWriterは、ネイティブ型とその文字列表現の間で変換を行い、文字列をストリームとの間でバイトとして転送します。そう
myStreamWriter.Write(123);
「123」(3つの文字「1」、「2」、「3」)をストリームに書き込みます。テキストファイル(htmlなど)を扱う場合、StreamReaderとStreamWriterが使用するクラスです。
一方
myBinaryWriter.Write(123);
32ビット整数値123(0x7B、0x00、0x00、0x00)を表す4バイトを書き込みます。バイナリファイルやネットワークプロトコルを扱っている場合は、BinaryReaderとBinaryWriterを使用できます。(ネットワークやその他のシステムとデータを交換する場合は、エンディアンに注意する必要がありますが、それは別の投稿です)。