ストリーム (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

ストリーム(stream)とは、データの入力または出力の機能を提供する抽象データ型である。ファイルの入出力を扱うもの、メモリバッファの入出力を扱うもの、ネットワーク通信を扱うものなどさまざまなものがある。特にファイルの入出力には、標準ストリームと呼ばれる特別なストリームが用意されていることもある。

C++[編集]

入出力ストリーム[編集]

<iostream>ヘッダファイルには標準入出力ストリームとしてcoutcincerrclog、およびワイド文字列用のwcoutwcinwcerrwclogが定義されている。

#include <iostream>
int main()
{
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

C++は強く型付けされた言語であるが、この標準入出力ストリームは多重定義によって全く型を意識せずに入出力を行える。さらにユーザー定義型も多重定義により定義できるため、非常に柔軟な入出力が可能である。さらに入出力操作子(マニピュレータ)の導入により、細かな制御が可能となった。

int i;
std::string s;
my_data_type d;
std::cin >> i; // 整数の入力をiに読み込む。
std::cin >> std::setw(10) >> s; // 10文字読み込む。
std::cin >> d; // オーバーロードすることで任意のデータをdに読み込む。

これらの機能により、従来のprintf関数で起こりがちであった型の不一致や制御子の過不足によるバグの可能性がきわめて低くなった。しかしその半面、マニピュレータの仕様など覚えなければならない事が増加し、またタイプ数もprintfと比べ格段に増えてしまったため、敬遠するプログラマも多い。

文字列ストリーム[編集]

<sstream>ヘッダファイルには文字列を対象としたストリーム操作の機能を提供するクラスistringstreamostringstreamが定義されている。

.NET Framework[編集]

.NET Frameworkでも入出力をストリームに一般化しており、ここでは低水準なRead, Writeメソッドのみサポートしている。以下に代表的なクラスを挙げる。

System.IO.Stream
一般的なストリームのインターフェースを提供する抽象クラス
System.IO.FileStream
ファイル入出力機能を提供するストリーム。
System.IO.MemoryStream
メモリバッファの入出力機能を提供するストリーム。
System.Net.Sockets.NetworkStream
ネットワークの入出力機能を提供するストリーム。

上記のストリームを読み書きするためのクラスが別途存在し、通常はこれらを用いて入出力処理を行う。

System.IO.BinaryWriter / System.IO.BinaryReader
ストリームに対してバイナリ形式での読み書き機能を提供するクラス。
System.IO.TextWriter / System.IO.TextReader
ストリームに対してテキスト形式での読み書き機能を提供するクラス。
System.IO.BufferedStream
既存のストリームにバッファリング機能を追加するためのストリーム。

関連項目[編集]