CLX C++ Libraries
Home >> zstream

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

example_zstream.cpp

#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;
}

example_unzstream.cpp

#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() などのメソッドを通じて解凍されたデータを取得することができます.

Reference