ZLibユニットによるデータの圧縮と展開

■TZCompressionStreamでデータを圧縮する

ZlibユニットにあるTZCompressionStreamクラスを使うとデータを圧縮することができます。

TZCompressionStreamクラスのコンストラクタは引数に圧縮したデータを書き込むTStream*をとります。
第2引数は圧縮方法です。

#include <ZLib.hpp>

unique_ptr<TFileStream> dest(new TFileStream("C:\\test.dat", fmCreate)); //圧縮したデータの書き込み先
unique_ptr<TZCompressionStream> cs(new TZCompressionStream(dest.get(), Zlib::zcDefault));

Writeメソッドで圧縮するデータを受け取り、圧縮したデータをコンストラクタの引数のTStream*に渡します。

UTF8String utf8 = L"圧縮のテスト圧縮のテスト圧縮のテスト";
cs->Write(utf8.c_str(), utf8.Length());

■TZDecompressionStreamで圧縮されたデータを展開する

ZlibユニットにあるTZDecompressionStreamクラスを使うと圧縮されたデータを復元することができます。

TZDecompressionStreamクラスのコンストラクタは引数に圧縮されたデータを読み込むTStream*をとります。

#include <ZLib.hpp>

unique_ptr<TFileStream> source(new TFileStream("C:\\test.dat", fmOpenRead)); //圧縮されたデータの読み込み元
unique_ptr<TZDecompressionStream> ds(new TZDecompressionStream(source.get()));

Readメソッドは入力ストリームからデータを読み込み、復元します。

__int64 size = ds->Size;
boost::scoped_array<char> buffer(new char[size]);
ds->Read(buffer.get(), size);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です