ここまでの例で挙げた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クラスをサポートすることによりファイルやメモリ以外の入力ソースにも幅広く柔軟に対応できるようになっています。
Streamクラスとデータの入出力
