6

TIdComproessorZLib コンポーネントは、Delphi/C++ Builder Indy ライブラリでの圧縮と圧縮解除に使用されます。CompressStream メソッドには次の定義があります。

public: virtual __fastcall CompressStream(TStream AInStream, TStream AOutStream, const TIdCompressionLevel ALevel, const int AWindowBits, const int AMemLevel, const int AStrategy);

ヘルプ ファイル内のこれらのパラメーターの完全な説明は次のとおりです。

CompressStream は、パブリック オーバーライド プロシージャです。先祖クラスで宣言された仮想メソッドの抽象を実装します。

AInStream は、圧縮操作で使用される圧縮されていないコンテンツを含むストリームです。

AOutStream は、圧縮操作から圧縮されたコンテンツを格納するために使用されるストリームです。AOutStream は、オペレーションから圧縮されたコンテンツを出力する前にクリアされます。AOutStream を省略すると、AInStream のストリームがクリアされ、圧縮操作からの出力に再利用されます。

ALevel を使用して、操作に必要な圧縮レベルを示します。

AWindowsBits と AMemLevel を使用して、ZLib ライブラリを使用してメモリ内圧縮を実行するために必要なメモリ フットプリントを制御します。

AStrategy を使用して、圧縮操作で使用される RLE エンコード方式を制御します。

ALevel の値は TIdCompressionLevel のヘルプ ページで定義されていますが、AWindowBits、AMemLevel、または AStrategy (単なる整数) にどの値を使用する必要があるかについての指示が見つかりません。

ソース コードを調べましたが、CompressStream は、ヘルプ ファイルに次のようにリストされている IndyCompressStream に委任するだけです。

IndyCompressStream(TStream InStream, TStream OutStream, const int level = Z_DEFAULT_COMPRESSION, const int WinBits = MAX_WBITS, const int MemLevel = MAX_MEM_LEVEL, const int Stratagy = Z_DEFAULT_STRATEGY);

IndyCompressStream のヘルプには、CompressStream が行うパラメーターの最小限の説明さえ記載されていません。

私は、IndyCompressStream live、source\Indy10\Protocols\IdZLibHeaders.pas で言及されている (と思う) これらのデフォルトの定数があるファイルを追跡しました。

  Z_DEFAULT_STRATEGY    = 0;
  Z_DEFAULT_COMPRESSION  = -1;
  MAX_WBITS = 15; { 32K LZ77 window }
  MAX_MEM_LEVEL = 9;

ただし、Z_DEFAULT_COMPRESSIONのドキュメントによると、 に指定された値は、そのパラメーターの正当な値でさえありません。TIdCompressionLevel

AWindowBits、AMemLevel、および AStrategy がこのコンポーネントにとって何を意味するか、およびそれらに使用するのに適切な値についてのドキュメントはどこかにありますか? 上記の値は、実際に推奨されるデフォルト値ですか? また、ソース ファイルには、「indy」、「Indy10」、および「indyimpl」ディレクトリが含まれます。現在の Indy コンポーネントのソースを見つけるために使用する必要があるのはどれですか?

ありがとう!

4

2 に答える 2

4

zlib.hの zlib ドキュメントを参照する必要があります。特に、 へのパラメータはdeflateInit2().

ほとんどの場合、いじる必要があるのは圧縮レベルとウィンドウ ビットだけです。ウィンドウ ビットの場合、通常はウィンドウ サイズを 32K (15) のままにしますが、gzip 形式の場合は 16 を追加する (31) か、否定する (-15) ことで、ヘッダーやトレーラーのない生の deflate 形式を取得します。一部の特殊な種類のデータについては、別の圧縮方法を使用すると改善される場合があります。たとえば、画像やその他のデータの数値配列です。

于 2013-10-04T17:28:12.440 に答える