前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

17.1. ストリームとは

SophiaFramework UNIVERSE では、 以下の手順により、 ストリームを利用して、 ファイルやネットワーク、メモリなどのストレージにデータを読み書きできます。

■ストリームによるデータ読み書き手順

  1. Open 関数を呼び出してストレージを開く。
  2. 読み込みの場合:
    1. GetStreamReader 関数を呼び出して読み込み用ストリームを取得する。 このとき、ストリームの各種設定も行われる。
    2. Fetch 関数を呼び出してストレージからストリームバッファにデータを読み込む。
    3. Read 関数、またはエクストラクタ(>> 演算子)を使用してストリームバッファから変数にデータを読み込む。
  3. 書き込みの場合:
    1. GetStreamWriter 関数を呼び出して書き込み用ストリームを取得する。 このとき、ストリームの各種設定も行われる。
    2. Write 関数、またはインサータ(<< 演算子)を使用して変数からストリームバッファにデータを書き込む。
    3. Flush 関数を呼び出してストリームバッファからストレージにデータを書き込む。
  4. Release 関数を呼び出してストリームを解放する。
  5. Close 関数を呼び出してストレージを閉じる。

図 17.1. ストリームの概念図

ストリームの概念図
[Note] ストリームの分類

ストリームは、切り口によって以下のように分類できます。

表 17.1. ストリームの種類 1

読み書きするデータ ストリームの種類
文字列 文字列ストリーム
バイナリ列(任意の型のデータ) バイナリストリーム

表 17.2. ストリームの種類 2

ストリームバッファ ストリームの種類
可変長 可変長バッファストリーム
固定長 固定長バッファストリーム

■具象ストリームクラス

ストリームには、以下の 8 種類の具象クラスがあります。 これらのストリームクラスはストリームバッファを介してストレージに読み書きを行います。 また、各種データ型に対するエクストラクタ(>> 演算子)とインサータ(<< 演算子)、 エンディアン変換などの機能も提供します。

表 17.3. 具象ストリームクラス

ストリームの種類 データの種類 読み込み用 書き込み用
文字列ストリーム AChar 型文字列 SFXAnsiStringStreamReader SFXAnsiStringStreamWriter
文字列ストリーム WChar 型文字列 SFXWideStringStreamReader SFXWideStringStreamWriter
バイナリストリーム バイナリ列(任意の型) SFXBinaryStreamReader SFXBinaryStreamWriter
可変長バッファストリーム AChar 型文字列 / WChar 型文字列 / バイナリ列(任意の型) SFXElasticStreamReader SFXElasticStreamWriter
[Note] AChar 型と WChar 型

BREW では、シングルバイト/マルチバイト文字(ANSI文字)を表す char 型と、 携帯電話の画面に表示するためのダブルバイト文字を表す AECHAR 型(uint16 型)があります。

SophiaFramewok UNIVERSE では、 これらの文字型はそれぞれ AChar 型、WChar 型として typedef により定義されています。 また、以下の 2 つの文字列クラスが利用可能です。

この 2 つの文字列クラスの機能は、文字列の型以外はすべて同等です。

[Note] 可変長バッファストリーム

可変長バッファストリームは、 ストリームバッファが可変長である、 文字列ストリームバイナリストリームを利用して読み書きするときに内部的に利用されます。 開発者は、可変長バッファストリームの実体である SFXElasticStreamReader / SFXElasticStreamWriter クラスを直接利用する必要はありません。

可変長バッファストリームは、 size 引数(バッファサイズ)を指定せずにストレージクラスの GetStreamReader / GetStreamWriter 関数を呼び出すことで取得できます。