【发布时间】:2013-10-11 17:45:13
【问题描述】:
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 来控制在 压缩操作。
在 TIdCompressionLevel 的帮助页面上定义了 ALevel 的值,但我找不到任何指示应该为 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 中提到的那些默认常量的文件,source\Indy10\Protocols\IdZLibHeaders.pas,它们是
Z_DEFAULT_STRATEGY = 0;
Z_DEFAULT_COMPRESSION = -1;
MAX_WBITS = 15; { 32K LZ77 window }
MAX_MEM_LEVEL = 9;
但是,根据TIdCompressionLevel 的文档,Z_DEFAULT_COMPRESSION 的值甚至不是该参数的合法值
是否有一些文档说明 AWindowBits、AMemLevel 和 AStrategy 对这个组件的意义,以及对它们使用哪些值是合理的?上面列出的值是实际推荐的默认值吗?此外,源文件包括“indy”、“Indy10”和“indyimpl”目录。我们应该使用哪些来查找当前 Indy 组件的来源?
谢谢!
【问题讨论】:
-
现在这就是提问的方式。干得好。
-
希望用它做什么?
-
Indy 有文档吗?
-
@DavidHeffernan:Indy has documentation,不过好久没更新了。
-
@RemyLebeau:有什么方法可以帮助我们更新文档吗?
标签: delphi c++builder indy zlib