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 コンポーネントのソースを見つけるために使用する必要があるのはどれですか?
ありがとう!