ここまでの例で挙げたFileStreamはファイルに対する読み書きを行うためのストリームですが、他にもStreamの一種としてバイト配列をストリームとして扱い読み書きを行うためのMemoryStreamが用意されています。

MemoryStreamとStreamReaderを使ってバイト配列から文字列を読み込む
Imports System
Imports System.IO
Imports System.Text

Class Sample
  Shared Sub Main()
    ' 何らかのデータが格納されているバイト配列を想定
    Dim data(31) As Byte

    ' バイト配列を読み取り専用のストリームとして扱うMemoryStreamを作成する
    Using stream As New MemoryStream(data, false)
      ' テキストエンコーディングにUTF-8を用いてstreamの読み込みを行うStreamReaderを作成
      Dim reader As New StreamReader(stream, Encoding.UTF8)

      ' streamから文字列を一行分読み込み、表示する
      Dim line As String = reader.ReadLine()

      Console.WriteLine(line)
    End Using
  End Sub
End Class

このように、入力ソースがFileStreamであってもMemoryStreamであっても、実際に読み込みを行う部分のコードはどちらも同じです。 StreamReader・StreamWriterやBinaryReader・BinaryWriterといったユーティリティクラスでは、データがファイルとして存在するのか、バイト配列として存在するのかといった違いがあっても、それらがStreamである限りはいずれも同じように扱うことができます。

StreamReader・StreamWriterやBinaryReader・BinaryWriter以外にもStreamを使った読み取り・書き込みをサポートしているクラスは多数あります。 これらのクラスでは、Streamクラスをサポートすることによりファイルやメモリ以外の入力ソースにも幅広く柔軟に対応できるようになっています。