nlib
nn::nlib::ZlibOutputStream クラスfinal

zlibを用いてデータを圧縮してストリームに書き込みます。 [詳解]

#include "nn/nlib/ZlibOutputStream.h"

+ nn::nlib::ZlibOutputStream の継承関係図

公開メンバ関数

errno_t Init () noexcept
 デフォルト設定で初期化します。 [詳解]
 
errno_t Init (const ZlibOutputStreamSettings &settings) noexcept
 settings で指定した値に従いストリーミングに利用するバッファ等の設定を行います。 [詳解]
 
基本的なメンバ関数
 ZlibOutputStream () noexcept
 デフォルトコンストラクタです。
 
- 基底クラス nn::nlib::OutputConverterStream に属する継承公開メンバ関数
errno_t SetStream (OutputStream *ostr) noexcept
 ベースとなる出力ストリームを設定します。 [詳解]
 
OutputStreamGetStream () const noexcept
 ベースとなる入力ストリームを取得します。 [詳解]
 
- 基底クラス nn::nlib::OutputStream に属する継承公開メンバ関数
size_t Pos () const noexcept
 ストリーム上の現在位置を返します。 [詳解]
 
uint64_t Pos64 () const noexcept
 ストリーム上の現在位置を64bit整数で返します。 [詳解]
 
bool Write (int b) noexcept
 ストリームに1バイトのデータを書き込みます。 [詳解]
 
bool Write (const void *p, size_t n) noexcept
 ストリームにn バイトのデータを書き込みます。 [詳解]
 
bool WriteGather (const nlib_fd_iovec *iov, int iovcnt) noexcept
 複数の非連続のバッファからデータをストリームに書き出します。 [詳解]
 
bool Flush () noexcept
 ストリームをフラッシュします。 [詳解]
 
bool Close () noexcept
 ストリームをフラッシュした後、ストリームを閉じます。成功した場合にはtrueを返します。 [詳解]
 
errno_t GetErrorValue () const noexcept
 エラー値を取得します。 [詳解]
 
BufferingMode GetBufferingMode () const noexcept
 バッファリングモードを取得します。
 
 operator bool () const
 内部でエラーが発生していなければtrueを返します。
 
constexpr OutputStream () noexcept
 デフォルトコンストラクタです。
 
virtual ~OutputStream () noexcept
 デストラクタです。何もしません。
 

その他の継承メンバ

- 基底クラス nn::nlib::OutputStream に属する継承公開型
enum  BufferingMode {
  BUFFERINGMODE_BLOCKBUFFERED = 0,
  BUFFERINGMODE_LINEBUFFERED,
  BUFFERINGMODE_UNBUFFERED
}
 OutputStreamのバッファリングモードです。 [詳解]
 
- 基底クラス nn::nlib::OutputStream に属する継承限定公開メンバ関数
void ResetBuffer (void *p, size_t nbytes) noexcept
 OutputStreamが持つバッファを設定します。 [詳解]
 
void SetError (errno_t e) const noexcept
 OutputStreamにエラーを設定します。 [詳解]
 
- 基底クラス nn::nlib::OutputStream に属する継承限定公開変数類
BufferingMode m_BufferingMode
 バッファリングモードが格納されています。 [詳解]
 

詳解

zlibを用いてデータを圧縮してストリームに書き込みます。

説明
ストリームに書き込んだデータはzlibで圧縮され書き込まれます。 サイズの大きいデータでもストリーミングして書き込むことができます。
利用方法は、オブジェクトの構築後、Init()でバッファ等をセットアップし、SetStream()でベースストリームに関連付けてから、OutputStreamと同様にデータを書き出します。 このストリームをクローズするとベースストリームはフラッシュされデタッチ(SetStream()以前の状態に戻る)されます。 ベースストリーム自体をクローズすることはありません。
データの書き込み中発生するエラーは、以下のようなものがあります。 zlibのエラーはerrnoのエラー値が設定されます。
  • Z_STREAM_ERRORの場合はEIO
  • Z_MEM_ERRORの場合はENOMEM
  • Z_BUF_ERRORの場合はENOBUFS
  • ベースストリームが失敗した場合はEIO
オブジェクトの状態遷移
オブジェクトの状態遷移の概略は以下のとおりです。
dot_inline_dotgraph_14.png
各種例:
misc/usezlib/usezlib.cpp.

ZlibOutputStream.h44 行目に定義があります。

関数詳解

§ Init() [1/2]

nn::nlib::ZlibOutputStream::Init ( )
inlinenoexcept

デフォルト設定で初期化します。

戻り値
0以外ならエラー
説明
以下のコードと同じです。
ZlibOutputStreamSettings settings;
なお、SetStream()の内部ではdeflateInit2を呼び出していて、データ圧縮のための初期化を行なっています。
現在のところ、windowBits には31が、memLevel には8が、strategy にはZ_DEFAULT_STRATEGYが指定されています。 z_streamzalloc, zfree, opaque にはいずれもZ_NULLが指定されています。
エラー値については、以下のようになります。
  • 既にベースストリームが設定されている場合にはEEXISTを返します。
  • ostrNULLの場合はEINVALを返します。
また、zlibdeflateInit2が返すエラーについては以下のような変換が行われています。
  • Z_MEM_ERRORENOMEMに変換されます。
  • Z_STREAM_ERROREINVALに変換されます。
  • Z_VERSION_ERRORENOTSUPに変換されます。

ZlibOutputStream.h48 行目に定義があります。

§ Init() [2/2]

nn::nlib::ZlibOutputStream::Init ( const ZlibOutputStreamSettings settings)
noexcept

settings で指定した値に従いストリーミングに利用するバッファ等の設定を行います。

引数
[in]settingsバッファ等の設定データ
戻り値
0エラーは発生していません。
EALREADY既にInit()が実行されている場合
EINVALバッファサイズが1024未満の場合、及びsettings で指定されたバッファの片方のみがNULLだった場合
ENOMEMバッファの動的確保が失敗した場合

このクラス詳解は次のファイルから抽出されました: