インテル® DAAL プログラミング・ガイド

データ圧縮

大量のデータをデバイスに送る場合やメモリー/永続ストレージに格納する場合、データ圧縮を行うことでネットワークのトラフィック、メモリー、永続ストレージのフットプリントを減らすことができます。インテル® DAAL は、ZLIB、LZO、RLE、BZIP2 を含む、最もポピュラーな圧縮/展開メソッドを実装します。

データ圧縮/展開の一般的な API

CompressionStream および DecompressionStream クラスは、データ圧縮/展開の一般的なメソッドを提供します。次の図は、高レベルの圧縮/展開フローを示しています。

Intel® DAAL compression flow

圧縮/展開メソッドと関連パラメーターを定義するには、CompressionStream または DecompressionStream コンストラクターの引数として Compressor または Decompressor オブジェクトを提供します。Compressor および Decompressor の詳細は、「圧縮/展開インターフェイス」を参照してください。

CompressionStream または DecompressionStream の演算子 << を使用して圧縮/展開ストリームの入力データを提供します。デフォルトでは、圧縮/展開ストリームメソッドはすべて、圧縮/展開の結果を格納するために必要なメモリーを割り当てます。メモリー割り当ての制御の詳細は、「圧縮/展開インターフェイス」を参照してください。

CompressionStream で格納された圧縮データを取得するには、以下のメソッドを利用可能です。

DecompressionStream で格納された展開データを取得するには、以下のメソッドを利用可能です。

圧縮/展開インターフェイス

CompressionStream および DecompressionStream クラスは、ほとんどの使用シナリオをカバーします。以下のような場合のみ、Compressor および Decompressor オブジェクトを使用して直接作業する必要があります。

Compressor および Decompressor クラスは、サポートしている圧縮/展開メソッド (ZLIB、LZO、RLE、BZIP2) のインターフェイスを提供します。

圧縮および展開オブジェクトは、デフォルト・パラメーターのセットで初期化されます。Compressor または Decompressor オブジェクトの parameter フィールドにアクセスして、特定の圧縮メソッドのパラメーターを変更することができます。

Compressor または Decompressor クラスを使用して圧縮/展開を行うには、setInputDataBlock() メソッドを使用して入力データを提供し、run() メソッドを呼び出します。このアプローチでは、圧縮/展開の結果を格納するメモリーを割り当てて制御する必要があります。一般に、出力データブロックの必要なサイズを正確に推定することはできません。また、提供するメモリーが圧縮/展開の結果を格納するのに不十分な場合もあります。しかし、run() 操作を継続するために追加のメモリーを割り当てる必要があるかどうかをチェックすることはできます。このチェックには、isOutputDataBlockFull() メソッドを使用します。getUsedOutputDataBlockSize() メソッドを使用して、出力データブロックに実際に書かれた圧縮/展開されたデータのサイズを取得することもできます。

CompressionStream および DecompressionStream で独自の圧縮/展開メソッドを使用することができます。この場合、Compressor および Decompressor オブジェクトをオーバーライドする必要があります。

サンプル

インテル® DAAL ディレクトリーの次のサンプルを参照してください。

C++:

Java*: