Declaration
template < int CompressionRate, class CharT = char, class Traits = std::char_traits<CharT> > class basic_zstream; template < class CharT = char, class Traits = std::char_traits<CharT> > class basic_unzstream; typedef basic_zstream<Z_DEFAULT_COMPRESSION, char> zstream; typedef basic_unzstream<char> unzstream;
Overview
zstream/unzstream は,zlib ライブラリを用いた圧縮・解凍を行うためのクラスです. これらのクラスは,ともに C++ の istream/ostream のフィルタ・ストリームとして実装されています. zstream には圧縮後のデータを格納する ostream,unzstream には圧縮されたデータを保持している istream を引数にインスタンスを生成します.生成されたインスタンスは,istream/ostream を継承しているので,通常の istream/ostream と同様のメソッドを用いてデータの読み込み, 書き出しを行います.
zstream/unzstream は zlib を利用しています.そのため,これらのクラスを使用する場合は, 実行環境に zlib がインストールされている必要があります.zlib は,zlib Home Site より取得してください.
Examples
#include <iostream> #include <fstream> #include "clx/zstream.h" int main(int argc, char* argv[]) { if (argc < 3) std::exit(-1); std::ifstream ifs(argv[1], std::ios::binary); std::ofstream ofs(argv[2], std::ios::binary); clx::zstream z(ofs); std::string buf; while (std::getline(ifs, buf)) { z << buf << std::endl; } return 0; }
#include <iostream> #include <fstream> #include "clx/zstream.h" int main(int argc, char* argv[]) { if (argc < 3) std::exit(-1); /* * unzstream は解凍用. * zlib 圧縮されている各種 istream のフィルタとして使用する. */ std::ifstream ifs(argv[1], std::ios::binary); clx::unzstream z(ifs); std::ofstream ofs(argv[2], std::ios::binary); char buf[32768]; do { z.read(buf, sizeof(buf)); ofs.write(buf, z.gcount()); } while (z.gcount() > 0); return 0; }
Template Parameters
- CompressionRate
- 圧縮率を 0--9 の範囲で指定します. デフォルトの圧縮率 (Z_DEFAULT_COMPRESSION) は 6 に設定されているようです. このパラメータは,zstream にのみ存在します.
- CharT
- 文字の型を指定します.デフォルト値は,char.
- Traits
- 文字列を扱うためのtraitsを指定します.デフォルト値は, std::char_traits<CharT>.
Related Types
zstream
typedef std::basic_ostream<CharT, Traits> stream_type; typedef basic_zstreambuf<CompressionRate, CharT, Traits> streambuf_type; typedef typename streambuf_type::size_type size_type;
unzstream
typedef std::basic_istream<CharT, Traits> stream_type; typedef basic_unzstreambuf<CharT, Traits> streambuf_type; typedef typename streambuf_type::size_type size_type;
Construction and Member Functions
zstream
basic_zstream(stream_type& out, size_type n = 4096); virtual ~basic_zstream() throw(); void finish();
zstream は,コンストラクタの引数に指定された出力ストリームに対して, 圧縮されたデータを出力して行きます.尚,コンストラクタの第 2 引数は, zstream の内部バッファのバッファサイズを表します.
zlib による圧縮は終了処理が必要となります.通常この終了処理は, デストラクタが呼ばれた時点で行いますが,finish() メソッドによって, 終了処理を行うタイミングを明示的に指示することもできます.
unzstream
basic_unzstream(stream_type& in, size_type n = 4096); virtual ~basic_unzstream() throw();
unzstream は,コンストラクタの引数に指定された入力ストリームからデータを読み込み, そのデータを解凍します.ユーザは,>> 演算子,read(), getline() などのメソッドを通じて解凍されたデータを取得することができます.