インテル® DAAL プログラミング・ガイド
大量のデータをデバイスに送る場合やメモリー/永続ストレージに格納する場合、データ圧縮を行うことでネットワークのトラフィック、メモリー、永続ストレージのフットプリントを減らすことができます。インテル® DAAL は、ZLIB、LZO、RLE、BZIP2 を含む、最もポピュラーな圧縮/展開メソッドを実装します。
CompressionStream および DecompressionStream クラスは、データ圧縮/展開の一般的なメソッドを提供します。次の図は、高レベルの圧縮/展開フローを示しています。
圧縮/展開メソッドと関連パラメーターを定義するには、CompressionStream または DecompressionStream コンストラクターの引数として Compressor または Decompressor オブジェクトを提供します。Compressor および Decompressor の詳細は、「圧縮/展開インターフェイス」を参照してください。
CompressionStream または DecompressionStream の演算子 << を使用して圧縮/展開ストリームの入力データを提供します。デフォルトでは、圧縮/展開ストリームメソッドはすべて、圧縮/展開の結果を格納するために必要なメモリーを割り当てます。メモリー割り当ての制御の詳細は、「圧縮/展開インターフェイス」を参照してください。
CompressionStream で格納された圧縮データを取得するには、以下のメソッドを利用可能です。
copyCompressedArray() メソッドを使用して、圧縮されたデータブロックを隣接する配列にコピーします。
コピーするバイト数を指定して、コピーするデータブロックを定義できます。メソッドは、ストリームの最初からデータをコピーして、CompressionStream からコピーされたデータを削除します。このため、次に copyCompressedArray() メソッドを呼び出したとき、メソッドはデータの次のブロックをコピーします。データをすべてコピーするには、copyCompressedArray() を呼び出す前に getCompressedBlocksSize() メソッドを呼び出して、ストリームの圧縮されたデータの合計サイズを取得します。
getCompressedBlocksCollection() メソッドを呼び出します。
copyCompressedArray() メソッドと異なり、getCompressedBlocksCollection() は圧縮されたブロックをコピーせずに、圧縮されたデータブロックのコレクションへのリファレンスを提供します。コレクションは、次に getCompressedBlocksCollection() メソッドを呼び出すまで利用可能です。
DecompressionStream で格納された展開データを取得するには、以下のメソッドを利用可能です。
copyDecompressedArray() メソッドを使用して、展開されたデータブロックを隣接する配列にコピーします。
コピーするバイト数を指定して、コピーするデータブロックを定義できます。メソッドは、ストリームの最初からデータをコピーして、DecompressionStream からコピーされたデータを削除します。このため、次に copyDecompressedArray() メソッドを呼び出したとき、メソッドはデータの次のブロックをコピーします。データをすべてコピーするには、copyDecompressedArray() を呼び出す前に getDecompressedBlocksSize() メソッドを呼び出して、ストリームの展開されたデータの合計サイズを取得します。
getDecompressedBlocksCollection() メソッドを呼び出します。
copyDecompressedArray() メソッドと異なり、getDecompressedBlocksCollection() は展開されたブロックをコピーせずに、展開されたデータブロックのコレクションへのリファレンスを提供します。コレクションは、次に getDecompressedBlocksCollection() メソッドを呼び出すまで利用可能です。
CompressionStream および DecompressionStream クラスは、ほとんどの使用シナリオをカバーします。以下のような場合のみ、Compressor および Decompressor オブジェクトを使用して直接作業する必要があります。
CompressionStream および DecompressionStream クラスが特定の使用モデルをカバーしない場合。
圧縮/展開の結果のメモリー割り当て/割り当て解除を制御する場合。
圧縮/展開のデフォルト・パラメーターを変更する場合。
Compressor および Decompressor クラスは、サポートしている圧縮/展開メソッド (ZLIB、LZO、RLE、BZIP2) のインターフェイスを提供します。
圧縮および展開オブジェクトは、デフォルト・パラメーターのセットで初期化されます。Compressor または Decompressor オブジェクトの parameter フィールドにアクセスして、特定の圧縮メソッドのパラメーターを変更することができます。
Compressor または Decompressor クラスを使用して圧縮/展開を行うには、setInputDataBlock() メソッドを使用して入力データを提供し、run() メソッドを呼び出します。このアプローチでは、圧縮/展開の結果を格納するメモリーを割り当てて制御する必要があります。一般に、出力データブロックの必要なサイズを正確に推定することはできません。また、提供するメモリーが圧縮/展開の結果を格納するのに不十分な場合もあります。しかし、run() 操作を継続するために追加のメモリーを割り当てる必要があるかどうかをチェックすることはできます。このチェックには、isOutputDataBlockFull() メソッドを使用します。getUsedOutputDataBlockSize() メソッドを使用して、出力データブロックに実際に書かれた圧縮/展開されたデータのサイズを取得することもできます。
CompressionStream および DecompressionStream で独自の圧縮/展開メソッドを使用することができます。この場合、Compressor および Decompressor オブジェクトをオーバーライドする必要があります。
インテル® DAAL ディレクトリーの次のサンプルを参照してください。
C++:
Java*: