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 组件的来源?
谢谢!