![]() ![]() ![]()
|
SophiaFramework 2.2 |
#include <SFUFileStream.hpp>
class SFUFileStream : public SFUStream;
typedef SFUFileStream& SFUFileStreamRef; typedef SFUFileStream* SFUFileStreamPtr; typedef SFUFileStream** SFUFileStreamHandle; typedef const SFUFileStream ConstSFUFileStream; typedef const SFUFileStream& ConstSFUFileStreamRef; typedef const SFUFileStream* ConstSFUFileStreamPtr; typedef const SFUFileStream** ConstSFUFileStreamHandle;
SFUFileStream クラスは、 BREW のファイルシステム上のファイルを読み書きするためのストリームです。
ファイルの読み込み/書き込みポインタ
ファイル入出力では、 読み込みポインタと書き込みポインタは同一のポインタになりますので、 別々に移動させることはできません。
バッファリング
BREW API でファイルシステムにアクセスするために使用する IFile インターフェイスでは、読み込みや書き込みの速度が 低速であることが知られています。 これは IFile の内部でバッファリングが適切に行われていないためだと考えられます。 IFile のこの弱点をカバーするために、 SFUFileStream では独自にバッファリングを行い、 IFile の読み書き関数を呼び出す回数を抑えています。
バッファリングに使用するバッファのサイズは、 ファイルを Open する前に、 SetBufferSize で設定します。 バッファ サイズは大きければ大きいほど高速になりますが、 それだけメモリを消費することになりますので、 バランスを考えてサイズを指定してください。 デフォルトでは 1KB のサイズになります。
特権レベルについて
SFUFileStream はファイルシステムへのアクセスを行いますので、 MIF ファイルの設定で特権レベルを指定しておく必要があります。 これを行わないと、 Open 関数が失敗します。
| コンストラクタ/デストラクタ | ||
|---|---|---|
| public |
SFUFileStream | SFUFileStream クラスのコンストラクタです。 |
| public |
~SFUFileStream | SFUFileStream クラスのデストラクタです。 |
| パブリック関数 | ||
|---|---|---|
| public |
Available | ストリームから読み込み可能なデータサイズを返します。 |
| public |
Close | ファイルストリームをクローズします。 |
| public |
Exception (SFAException から継承) | エラーコードを取得/設定します。 |
| public |
Flush | バッファリングされているデータをファイルに書き込みます。 |
| public |
Get | ファイルストリームからデータを読み込みます。 |
| public |
GetBufferSize | バッファ サイズを取得します。 |
| public |
GetFile | 内部で使用している IFile インターフェイスを取得します。 |
| public |
IsEOS | ファイルストリームの読み取りポインタがストリームの終端に達しているかどうか判定します。 |
| public |
Open | ファイルをオープンします。 |
| public |
Put | ファイルストリームにデータを書き込みます。 |
| public |
Seek | ストリームの読み込み/書き込みポインタを移動します。 |
| public |
SetBufferSize | バッファ サイズを設定します。 |
| public |
Tell | 現在のストリーム ポインタの位置を取得します。 |
| public |
operator<< (SFUStream から継承) | ストリームのインサータ (書き込み演算子) です。 |
| public |
operator>> (SFUStream から継承) | ストリームのエクストラクタ (読み取り演算子) です。 |
| プロテクト関数 | ||
|---|---|---|
| public |
Exception (SFAException から継承) | エラーコードを取得/設定します。 |
| protected |
endianbig (SFUStream から継承) | 読み込みモード/書き込みモードのエンディアンをビッグエンディアンに設定します。 |
| protected |
endianlittle (SFUStream から継承) | 読み込みモード/書き込みモードのエンディアンをリトルエンディアンに設定します。 |
| protected |
multi (SFUStream から継承) | 任意のサイズのデータを読み書きします。 |
| protected |
offset (SFUStream から継承) | ストリームの読み込み/書き込みポインタを指定された位置に移動します。 |
| protected |
seek (SFUStream から継承) | ストリームの読み込み/書き込みポインタを指定された位置に移動します。 |
| 型 | ||
|---|---|---|
| EndianEnum (SFUStream から継承) | ストリームのエンディアン変換を表す定数です。 | |
| NO_ERROR (SFAException から継承) | エラーがないことを表す定数です。 | |
| SeekEnum (SFUStream から継承) | ストリームのシークモードを表す定数です。 | |
[ public ] SFUFileStream(Void);
データメンバの初期化を行います。 エラー値が SFERR_NO_ERROR に設定されます。
下記の例では、ファイルストリームを作成しています。
SFUFileStream fstream;
[ public, virtual ] ~SFUFileStream(Void);
ファイルがオープンされている場合は、自動的にクローズされます。
[ public, virtual ] UInt32 Available(Void);
ストリームから読み込み可能なデータサイズを返します。 ファイルがオープンされていない場合は 0 を返します。 いかなる場合もエラー値は設定されません。
[ public ] Void Close(Void);
ファイルストリームをクローズします。 ファイルに保存されていないバッファリング データがあれば、それを書き出します。 内部で使用している IFile インスタンスや IFileMgr インスタンスを解放します。 また、バッファリングに使用したバッファを解放します。 エラー値を SFERR_NO_ERROR に設定します。
BREW アプレットがサスペンド状態に入る時は、 この Close 関数を呼び出して、 ファイルシステムのリソースを解放する必要があります。
[ public ] Void Flush(Void);
バッファリングされているデータをファイルに書き込みます。 ファイルストリームへのデータ書き込みがされていない場合、 実際にファイルに書き込まれることはありません。
ファイルストリームからバッファリングされているデータを読み込みます。
エラーが発生した場合、読み取りポインタの位置が変化することはありません。 成功すると、読み取りポインタの位置が size だけ進みます。
[ public ] UInt32 GetBufferSize(Void);
[ public ] SFUBrewPtr<SFBFile>& GetFile(Void);
ファイルストリームがオープンされていない場合は、 NULL を返します。
現在のファイルサイズを取得します。 このサイズは、 現在バッファリングされているがファイルに書き込まれていないデータも含めたサイズであり、 必ずしも現時点のファイルシステム上のファイルサイズと一致するわけではありません。
[ public, virtual ] Bool IsEOS(Void);
ストリームがオープンされていない場合は TRUE が返ります。 いかなる場合でも、エラー値は設定されません。
下記のコードでは、 ストリームの終端に達するまでデータを読み取っています。
while (! stream.IsEOS()) {
Byte b;
stream >> b;
....
}
[ public ] SFCError Open( ConstACharPtr filename // ファイル名 AEEOpenFileMode mode = _OFM_CREATE // オープンモード );
ファイル名
オープンモード。 以下のいずれかの値を指定します。
| _OFM_READ (ファイルを読取専用にオープンします。新規作成はされません。) |
| _OFM_READWRITE (ファイルを読み書き用にオープンします。新規作成はされません。) |
| _OFM_CREATE (読み書き用のファイルを新規作成します。ファイルがすでに存在する場合はエラーになります。) |
設定されたエラー値を返します。
BREW の IFileMgr インターフェイスを使用して、ファイルをオープンします。
下記の例では、ファイルが存在する場合にはそれをオープンし、 存在しない場合にはファイルを作成してオープンしています。
ConstACharPtr fileName = "record.dat";
SFUFileStream fstream;
fstrea.SetBufferSize(512);
if (fstream.Open(fileName, _OFM_READWRITE, bufSize) != SFERR_NO_DATA) {
fstream.Open(fileName, _OFM_CREATE, bufSize);
}
[ public, virtual ] UInt32 Put( ConstVoidPtr ptr // 書き込むデータのポインタ UInt32 size // 書き込むデータのサイズ );
成功すると実際に書き込まれたバイト数を返します。 失敗すると 0 が返ります。
ファイルにデータを書き込みます。
[ public, virtual ] UInt32 Seek( SInt32 offset // 移動オフセット SeekEnum dir // 移動基準 ModeEnum mode // 読み込み/書き込みモード );
移動量を表すオフセット値です。 負の値も指定できます。
以下のいずれかの値を指定します。
| SEEK_START (ストリームの開始位置からの移動) |
| SEEK_CURRENT (ストリームの現在位置からの移動) |
| SEEK_END (ストリームの終端位置からの移動) |
読み込み/書き込みモードを指定します。 ファイルストリームではこの引数は無視されます。 ファイルストリームでは読み込みポインタと書き込みポインタを別々に移動することはできません。
新しい位置を返します。 失敗した場合は UInt32(-1) を返します。
この関数で設定されたバッファ サイズは Open を呼び出したときに使用されます。 すでにオープンされている場合、 既存のバッファのサイズは変更されません。
[ public, virtual ] UInt32 Tell( ModeEnum mode // 読み込み/書き込みモード );
ファイルストリームの場合は、この引数は無視されます。
成功すると、現在のストリーム ポインタの位置を返します。 失敗すると UInt32(-1) を返します。
| Copyright(C) 2003-2004 Sophia Cradle Inc., All Rights Reserved. |
![]() ![]() ![]()
|