英語版
このページの英語版を見る

std.zlib

zlib ライブラリを使用してデータを圧縮/解凍する。
Examples:
バッファが小さい場合は compressuncompressを直接使うことができる。
import std.zlib;

auto src =
"the quick brown fox jumps over the lazy dog\r
 the quick brown fox jumps over the lazy dog\r";

ubyte[] dst;
ubyte[] result;

dst = compress(src);
result = cast(ubyte[]) uncompress(dst);
assert(result == src);
圧縮するデータが1つのバッファに収まらない場合は、次のようにする。 CompressUnCompress.
import std.zlib;
import std.stdio;
import std.conv : to;
import std.algorithm.iteration : map;

UnCompress decmp = new UnCompress;
foreach (chunk; stdin.byChunk(4096).map!(x => decmp.uncompress(x)))
{
    chunk.to!string.write;
}

参考文献 ウィキペディア

Authors:

ソース std/zlib.d

class ZlibException: object.Exception;
エラーは ZlibException をスローする。
uint adler32(uint adler, const(void)[] buf);

バッファ分のデータの Adler-32 チェックサムを計算する。

Parameters:
uint adler 計算の開始チェックサムを指定する。新しいチェックサムには を使用する。この関数の出力を使用する。 の出力を使用する。
const(void)[] buf 入力データを含むバッファ
Returns:
提供された入力データと開始チェックサムのuint
Examples:
static ubyte[] data = [1,2,3,4,5,6,7,8,9,10];

uint adler = adler32(0u, data);
writeln(adler); // 0xDC0037
uint crc32(uint crc, const(void)[] buf);

バッファ分のデータのCRC32チェックサムを計算する。

Parameters:
uint crc 計算の開始チェックサムを指定する。0を使用する。 を使用する。この関数の出力を使用する。 の出力を使用する。
const(void)[] buf 入力データを含むバッファ
Returns:
与えられた入力データと開始チェックサムに対するuint チェックサム。
ubyte[] compress(const(void)[] srcbuf, int level);

ubyte[] compress(const(void)[] srcbuf);

データを圧縮する

Parameters:
const(void)[] srcbuf 圧縮するデータを含むバッファ。
int level 圧縮レベル。有効な値は -1 ~ 9 で、-1 はデフォルトの圧縮レベル (6)、0 は圧縮なし、1 は圧縮を表す。 はデフォルトのレベル(6)、0は圧縮なし、1は最も圧縮率が低く、9は最も圧縮率が高い。 は最も圧縮度が低く、9は最も圧縮度が高い。
Returns:
圧縮データ
void[] uncompress(const(void)[] srcbuf, size_t destlen = 0u, int winbits = 15);
srcbuf[]内のデータを圧縮解除する。
Parameters:
const(void)[] srcbuf 圧縮データを含むバッファ
size_t destlen 解凍されたデータのサイズ。 正確である必要はないが、正確なサイズが与えられると解凍が速くなる になる。
int winbits 最大ウィンドウサイズの底2の対数。
Returns:
伸長データ。
enum HeaderFormat: int;
圧縮ストリームを包むヘッダー形式
deflate
標準の zlib ヘッダ
gzip
gzip ファイルフォーマットヘッダ
determineFromData
が解凍時に使われる。データを見てストリーム形式を自動的に検出しようとする。
class Compress;
圧縮されるデータが一つのバッファにまとまっていない場合に使用する。
this(int level, HeaderFormat header = HeaderFormat.deflate);

this(HeaderFormat header = HeaderFormat.deflate);
コンストラクタ。
Parameters:
int level 圧縮レベル。有効な値は1~9で、1が最も圧縮率が低く、9が最も圧縮率が高い。 で、9 が最も圧縮される。デフォルト値は6である。
HeaderFormat header で利用可能なオプションの1つに圧縮型を設定する。 で指定する。 HeaderFormat.デフォルトはHeaderFormat.deflateである。
const(void)[] compress(const(void)[] buf);
bufのデータを圧縮して返す。
Parameters:
const(void)[] buf 圧縮するデータ
Returns:
圧縮されたデータ。連続した呼び出しから返されるバッファは、連結されるべきである。
void[] flush(int mode = Z_FINISH);
残りのデータを圧縮して返す。 返されたデータは、compress()によって返されたデータに追加されなければならない。
Parameters:
int mode 以下のいずれかである:
Z_SYNC_FLUSH
フラッシングを次のバイト境界に同期させる。 より多くのデータを後で圧縮する場合に使用する。
Z_FULL_FLUSH
フラッシングを次のバイト境界に同期させる。 後でさらにデータを圧縮する場合に使用する、 この時点で伸長器を再起動可能にしておく必要がある。 この時点で再開可能である必要がある。
Z_FINISH
(デフォルト) データの圧縮が終了したときに使用される。
class UnCompress;
解凍するデータが1つのバッファにすべて入っていない場合に使用する。
this(uint destbufsize);

this(HeaderFormat format = HeaderFormat.determineFromData);
destbufsize は D.zlib.uncompress() と同じである。
const(void)[] uncompress(const(void)[] buf);
buf 内のデータを展開し、展開後のデータを返す。 これを連続して呼び出すと返されるバッファは連結されなければならない。 する。
void[] flush();
残りのデータを解凍して返す。 返されたデータは、uncompress()によって返されたデータに追加されるべきである。 UnCompressオブジェクトはそれ以上使用できない。
const @property bool empty();
すべての入力データが解凍され、それ以降のデータがない場合は真を返す。 を返す。
Examples:
// いくつかのランダムデータ
ubyte[1024] originalData = void;

// ガベージデータを追加する(またはしない、どちらでも機能する)
auto compressedData = cast(ubyte[]) compress(originalData) ~ cast(ubyte[]) "whatever";

auto decompressor = new UnCompress();
auto uncompressedData = decompressor.uncompress(compressedData);

assert(uncompressedData[] == originalData[],
        "The uncompressed and the original data differ");
assert(decompressor.empty, "The UnCompressor reports not being done");