ここまでの例で挙げたFileStreamはファイルに対する読み書きを行うためのストリームですが、他にもStreamの一種としてバイト配列をストリームとして扱い読み書きを行うためのMemoryStreamが用意されています。
MemoryStreamとStreamReaderを使ってバイト配列から文字列を読み込む
using System;
using System.IO;
using System.Text;
class Sample {
static void Main()
{
// 何らかのデータが格納されているバイト配列を想定
var data = new byte[32];
// バイト配列を読み取り専用のストリームとして扱うMemoryStreamを作成する
using (var stream = new MemoryStream(data, false)) {
// テキストエンコーディングにUTF-8を用いてstreamの読み込みを行うStreamReaderを作成
var reader = new StreamReader(stream, Encoding.UTF8);
// streamから文字列を一行分読み込み、表示する
var line = reader.ReadLine();
Console.WriteLine(line);
}
}
}
このように、入力ソースがFileStreamであってもMemoryStreamであっても、実際に読み込みを行う部分のコードはどちらも同じです。 StreamReader・StreamWriterやBinaryReader・BinaryWriterといったユーティリティクラスでは、データがファイルとして存在するのか、バイト配列として存在するのかといった違いがあっても、それらがStreamである限りはいずれも同じように扱うことができます。
StreamReader・StreamWriterやBinaryReader・BinaryWriter以外にもStreamを使った読み取り・書き込みをサポートしているクラスは多数あります。 これらのクラスでは、Streamクラスをサポートすることによりファイルやメモリ以外の入力ソースにも幅広く柔軟に対応できるようになっています。
Streamクラスとデータの入出力
