SophiaFramework UNIVERSE 5.3 |
#include <SFXZIPDecoder.h.hpp>
class SFXZIPDecoder : public SFXStorage;
SFMTYPEDEFCLASS(SFXZIPDecoder)
SFXZIPDecoder クラスは、 SFXFile や SFXTCPSocket などのストレージや SFBSource、SFBAStream に格納された gzip による Deflate 圧縮データを解凍するときに使用します。
■ SFXZIPDecoder クラスの使用手順
制限事項 | |
---|---|
データの読み込みだけがサポートされます。データの書き込みはサポートされません。 また、読み込み位置の移動もサポートしません。 |
例 862. SFXZIPDecoder クラスの使用方法
// コールバック関数で使うので、_decoder はクラスのメンバ変数にする class MyClass { private: SFXFile _file; // 入力ファイル SFXZIPDecoder _decoder; // gzip デコーダー SFXAnsiStringStreamReader _reader; // 読み込み用ストリーム SFXAnsiString _unzipString; // 解凍後の文字列 public: Void Start(Void); // コールバック関数 XALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch) }; Void MyClass::Start(Void) { SFCError error; // エラー // 読み込みモードでファイルを開く if ((error = _file.OpenReadOnly(SFXPath("/testdata.tar.gz"))) == SFERR_NO_ERROR) { // ファイルストレージを gzip デコーダに設定する if ((error = _decoder.Open(_file)) == SFERR_NO_ERROR) { // gzip デコーダから読み込み用ストリームを取得する // ※ size 引数を指定していないので、ストリームバッファは可変長 if ((error = _decoder.GetStreamReader(&_reader)) == SFERR_NO_ERROR) { // フェッチを行う: 実際に gzip デコーダからからストリームバッファにデータを読み込む // ※1. 読み込み(フェッチ)の結果は、OnFetch 関数に通知される // ※2. ストリームバッファは、読み込むデータのサイズに合わせて自動的に拡張される if ((error = _reader.Fetch(XALLBACK_INTERNAL(OnFetch))) != SFERR_NO_ERROR) { // エラーのとき: OnFetch 関数は呼び出されない _reader.Release(); } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _decoder.Close(); } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _file.Close(); } } } // 読み込み(フェッチ)の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error) { if (error == SFERR_NO_ERROR) { // 読み込み(フェッチ)が成功したとき // ストリームバッファから _unzipString 変数にデータを読み込む(データは解凍されている) if ((error = _reader.ReadSFXAnsiString(&_unzipString)) == SFERR_NO_ERROR) { // _unzipString 変数の内容をデバッグウィンドウに表示する TRACE("%s", _unzipString.GetCString()); _reader.Release(); } } // 終了処理 _decoder.Close(); _file.Close(); }
コンストラクタ/デストラクタ |
---|
SFXZIPDecoder( Void ) SFXZIPDecoder クラスのコンストラクタです。
|
~SFXZIPDecoder( Void ) SFXZIPDecoder クラスのデストラクタです。
|
パブリック関数 | |
---|---|
SFCError |
AsSFBAStream(
SFBAStreamSmpPtr result
) SFBAStream インスタンスに変換します。
|
SFCError |
AsSFBSource(
SFBSourceSmpPtr result
) SFBSource インスタンスに変換します。
|
Void |
Cancel( Void ) Read のスケジュールをキャンセルします。
|
Void |
Close( Void ) デコーダーを閉じます。
|
SFBUnzipAStreamSmpConstRef |
GetSFBUnzipAStream( Void ) 内部で管理する SFBUnzipAStream インスタンスを取得します。
|
SFCError |
GetStreamReader(
UInt32 size
, SFXStreamReaderPtr result
) 読み込み用ストリームを取得します。
|
SFCError |
GetStreamReader(
SFXStreamReaderPtr result
) 読み込み用ストリームを取得します。
|
SFCError |
GetStreamWriter(
UInt32 size
, SFXStreamWriterPtr result
) 【現在、この関数は使えません。】
|
SFCError |
GetStreamWriter(
SFXStreamWriterPtr result
) 【現在、この関数は使えません。】
|
SFCError |
Open(
SFXStorageConstRef storage
) ストレージ、ストリーム、またはソースを設定します。
|
SFCError |
Open(
SFBAStreamSmpConstRef stream
) ストレージ、ストリーム、またはソースを設定します。
|
SFCError |
Open(
SFBSourceSmpConstRef source
) ストレージ、ストリーム、またはソースを設定します。
|
SFCError |
Read(
VoidPtr buffer
, UInt32Ptr size
) Read(ストリームを使用しないデコーダーからのデータ読み込み)を行います。
|
SFCError |
ScheduleRead(
CallbackSPP spp
, VoidPtr reference
) Read(ストリームを使用しないデコーダーからのデータ読み込み)をスケジュールします。
|
SFCError |
ScheduleWrite(
CallbackSPP spp
, VoidPtr reference
) 【現在、この関数は使えません。】
|
SFCError |
Write(
VoidConstPtr buffer
, UInt32Ptr size
) 【現在、この関数は使えません。】
|
型 |
---|
CallbackSPP
(SFXStorage から継承)
ストレージクラスで使用するコールバック関数の型です。
|
[ public, explicit ] SFXZIPDecoder(Void);
このコンストラクタは、何も行いません。
[ public, virtual ] virtual ~SFXZIPDecoder(Void);
[ public, virtual, const ] SFCError AsSFBAStream( SFBAStreamSmpPtr result // SFBAStream インスタンスへのポインタ );
SFBAStream インスタンスへのポインタを指定します。
この関数は、 このストレージが内部で管理する SFBUnzipAStream インスタンスを SFBAStream インスタンスに変換します。
result 引数には、変換結果である SFBAStream インスタンスへのポインタが返ります。
注意 | |
---|---|
この関数により、 このストレージを SFBAStream インスタンスとして扱えます。 |
[ public, virtual, const ] SFCError AsSFBSource( SFBSourceSmpPtr result // 結果を格納するポインタ );
SFBSource インスタンスへのポインタを指定します。
この関数は、 このストレージが内部で管理する SFBUnzipAStream インスタンスを SFBSource インスタンスに変換します。
result 引数には、変換結果である SFBSource インスタンスへのポインタが返ります。
注意 | |
---|---|
この関数は、内部で BREW API の BREW API ISOURCEUTIL_SourceFromAStream 関数を呼び出します。 |
注意 | |
---|---|
この関数により、 このストレージを SFBSource インスタンスとして扱えます。 |
SFXZIPDecoder::Open | SFBUnzipAStream | SFBSource | SFBSourceUtil | BREW API ISOURCEUTIL_SourceFromAStream
[ public, virtual ] Void Cancel(Void);
この関数は、 SFXZIPDecoder::ScheduleRead 関数による Read(ストリームを使用しないデコーダーからのデータ読み込み)のスケジュールをキャンセルします。
具体的には、コールバック関数の登録をキャンセルします。
注意 | |
---|---|
この関数は、SFXZIPDecoder::Close 関数から呼び出されます。 |
[ public ] Void Close(Void);
この関数は、このデコーダーを閉じます(このデコーダーを終了します)。
具体的には、 SFXZIPDecoder::Cancel 関数を呼び出して Read(ストリームを使用しないデコーダーからのデータ読み込み)のスケジュールをキャンセルし、 内部で管理している SFBUnzipAStream インスタンスを解放します。
注意 | |
---|---|
登録されていたコールバックはキャンセルされます。 |
注意 | |
---|---|
この関数は、SFXZIPDecoder::~SFXZIPDecoder デストラクタから呼び出されます。 |
Tip | |
---|---|
サスペンド時は、この関数を呼び出してリソースを解放します。 |
[ public, const ] SFBUnzipAStreamSmpConstRef GetSFBUnzipAStream(Void);
このデコーダーが内部で管理する SFBUnzipAStream インスタンス
この関数は、 このデコーダーが内部で管理する SFBUnzipAStream インスタンスを取得します。
[ public, virtual ] SFCError GetStreamReader( UInt32 size // バッファサイズ SFXStreamReaderPtr result // 読み込み用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamReader( SFXStreamReaderPtr result // 読み込み用ストリームへのポインタ );
この関数は、読み込み用ストリームを取得します。
size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamReader クラスが利用されます。
Tip | |
---|---|
読み込み用ストリームは、読み込むデータの種類に応じて SFXBinaryStreamReader、 SFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。 |
注意 | |
---|---|
この関数を呼び出す前に、 SFXZIPDecoder::Open 関数を使用してソースをデコーダーに登録する必要があります。 |
SFXZIPDecoder::Open | SFXZIPDecoder::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | ストリームバッファ
[ public, virtual ] SFCError GetStreamWriter( UInt32 size // サイズ SFXStreamWriterPtr result // 書き込み用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamWriter( SFXStreamWriterPtr result // 書き込み用ストリームへのポインタ );
SFERR_UNSUPPORTED
【現在、この関数は使えません。】
[ public ] SFCError Open( SFXStorageConstRef storage // 解凍するストレージ );
[ public ] SFCError Open( SFBAStreamSmpConstRef stream // 解凍するストリーム );
[ public ] SFCError Open( SFBSourceSmpConstRef source // 解凍するソース );
この関数は、解凍するストレージ、ストリーム、またはソースをこのデコーダ(SFXZIPDecoder ストレージ)に設定します。
引数には、SFXStorage、SFBAStream、または SFBSource インスタンスを指定できます。
この関数を実行した後、 SFXZIPDecoder::GetStreamReader 関数または SFXZIPDecoder::Read 関数を使用して gzip 形式で圧縮されたデータを解凍して読み込むことが可能です。
注意 | |
---|---|
この関数は、内部的に SFBUnzipAStream::SetStream 関数を呼び出して、 解凍するストレージ、ストリーム、またはソースをこのデコーダ(SFXZIPDecoder ストレージ)が内部で管理する SFBUnzipAStream インスタンスのソースとして設定します。 このとき、ストレージとソースは、内部的にそれぞれ AsSFBStream 関数と SFBSourceUtil::AStreamFromSource 関数によりストリームに変換されて設定されます。 |
SFBUnzipAStream::SetStream | SFXZIPDecoder::GetStreamReader | SFXZIPDecoder::Read | SFXZIPDecoder::Close | SFXStorage | SFBAStream | SFBSource | SFBUnzipAStream | BREW API IUNZIPASTREAM_SetStream
[ public, virtual ] SFCError Read( VoidPtr buffer // データを読み込むバッファ UInt32Ptr size // 呼び出す前: データを読み込むバッファのサイズ。戻り値: 実際に読み込んだデータのサイズ );
データを読み込むバッファを指定します。
この関数を呼び出す時は、データを読み込むバッファのサイズを指定します。 この関数が戻ると、実際にバッファに読み込んだデータのサイズが格納されています。
この関数は、Read(ストリームを使用しないデコーダーからのデータ読み込み)を行います。
デコーダーからすべてのデータが読み込まれた場合、 この関数は SFERR_NO_ERROR を返し、かつ、 size 引数のポインタが指す場所に 0 が戻ります。
※ この関数が AEE_NET_WOULDBLOCK を返す場合、 SFXZIPDecoder::ScheduleRead 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出して Read を行う必要があります。
注意 | |
---|---|
この関数は、 内部で SFBAStream::Read 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXZIPDecoder::Open 関数を呼び出して ソースをデコーダーに登録する必要があります 。 |
SFXZIPDecoder::Open | SFXZIPDecoder::ScheduleRead | SFBAStream::Read | BREW API IUNZIPASTREAM_Read
[ public, virtual ] SFCError ScheduleRead( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ(参照値) );
この関数は、 Read(ストリームを使用しないデコーダーからのデータ読み込み)をスケジュールします。
具体的には、 SFXZIPDecoder::Read 関数による Read を行うコールバック関数を登録します。 登録されたコールバック関数は、Read が可能になると BREW AEE により呼び出されます。
コールバック関数が呼び出されるまでは、「Read スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(ソースが開いている状態)に戻ります。
コールバック関数が呼び出される前に、 SFXZIPDecoder::Cancel 関数を呼び出すと、 Read(ストリームを使用しないデコーダーからのデータ読み込み)のスケジュールはキャンセルされ、 この関数を呼び出す直前の状態(ソースが開いている状態)に戻ります。
なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。
※ SFXZIPDecoder::Read 関数の戻り値が AEE_STREAM_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、再び Read(ストリームを使用しないデコーダーからのデータ読み込み)を試みます。
注意 | |
---|---|
この関数は、 内部で SFBAStream::Readable 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXZIPDecoder::Open 関数を呼び出して ソースをデコーダーに登録しておく必要があります 。 また、既に Read がスケジュールされている場合は、SFERR_INVALID_STATE エラーが返ります。 |
SFXZIPDecoder::Read | SFXZIPDecoder::Open | SFXZIPDecoder::Cancel | SFBAStream::Readable | SFXStorage::CallbackSPP | BREW API IUNZIPASTREAM_Readable
[ public, virtual ] SFCError ScheduleWrite( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ(参照値) );
SFERR_UNSUPPORTED
【現在、この関数は使えません。】
[ public, virtual ] SFCError Write( VoidConstPtr buffer // 書き込むバッファ UInt32Ptr size // 書き込むデータのサイズ );
SFERR_UNSUPPORTED
【現在、この関数は使えません。】
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |