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

6.4. メモリ ストリーム

SFUMemoryStream は、メモリバッファに対する入出力を実装しています。

Void TestMemory() {
    SFUMemoryStream mstr;
    mstr.Open(0);
    mstr << endianbig;
    mstr >> endianbig;

    for (UInt32 i = 0; i < 4; i++) {
        mstr << i;
        if (mstr.Exception() != SFERR_NO_ERROR) {
            TRACE("write error!");
        }
    }

    while (! mstr.IsEOS()) {
        UInt32 n;
        mstr >> n;
        TRACE("%d", n);
    }
}

この例では初期バッファサイズ 0 でメモリ ストリームを オープンしています。 メモリ ストリームにデータを書き込むと、 バッファは自動的に拡大していきます。

メモリ ストリームに対して endianbig マニピュレータを使用することで、 数値データの入出力におけるエンディアン変換を自動的に行うことができます。 上記の例ではメモリ上にビッグエンディアンとして書き込み、 メモリ上のデータがビッグエンディアンであると仮定して読み取ります。

データの書き込みと読み取りは インサータ (<<) エクストラクタ (>>) で行います。 書き込み時にエラーがあると、Exception() は SFERR_NO_ERROR 以外の値を返します。 読み取り時にストリームの終端に達すると、 IsEOS が TRUE を返します。