使用压缩 API

您所在的位置:网站首页 depcompress 使用压缩 API

使用压缩 API

#使用压缩 API| 来源: 网络整理| 查看: 265

使用压缩 API 项目 06/12/2023

许多应用程序需要使用无损数据压缩和解压缩。 压缩 API 通过公共 API 公开 Windows 压缩算法来简化此操作。 每个压缩算法都有一组控制其行为的属性。 压缩 API 公开一个接口,使开发人员能够设置或查询这些属性的值。 支持压缩算法的所有属性都具有表示这些属性的常用值的默认值。 如果压缩和解压缩都需要属性,则默认值将相同,确保相同的值用于压缩和解压缩。

选择压缩算法

开发人员确定应用程序需要压缩或解压缩数据后,下一步是选择压缩算法。 这可能取决于测试以查找特定应用程序的速度、压缩率和内存要求的最佳性能组合。 以下列表提供了压缩 API 当前支持的压缩算法的相对比较。 并非所有选项都可用于每种压缩算法,并且比较是近似的,因为性能可能取决于输入数据。

XPRESS (COMPRESS_ALGORITHM_XPRESS)

速度非常快,资源要求低 中等压缩率 压缩和解压缩速度高 内存要求低 支持 COMPRESS_INFORMATION_CLASS 枚举中提供的 COMPRESS_INFORMATION_CLASS_LEVEL 选项。 默认值为 (DWORD) 0。 对于某些数据, (DWORD) 1 的值可以提高压缩率,压缩速度略慢。

使用 Huffman 编码的 XPRESS (COMPRESS_ALGORITHM_XPRESS_HUFF)

压缩比高于 COMPRESS_ALGORITHM_XPRESS 中等压缩率 中到高压缩和解压缩速度 内存要求低 支持 COMPRESS_INFORMATION_CLASS 枚举中的 COMPRESS_INFORMATION_CLASS_LEVEL 选项。 默认值为 (DWORD) 0。 对于某些数据, (DWORD) 1 的值可以提高压缩率,压缩速度略慢。

MSZIP (COMPRESS_ALGORITHM_MSZIP)

使用的资源多于 COMPRESS_ALGORITHM_XPRESS_HUFF 生成类似于 RFC 1951 的压缩块。 中高压缩比 中等压缩速度和较高的解压缩速度 中等内存要求

LZMS (COMPRESS_ALGORITHM_LZMS)

如果要压缩的数据大小超过 2MB,则良好的算法。 压缩率高 压缩速度低,解压缩速度高 中到高内存要求 支持 COMPRESS_INFORMATION_CLASS 枚举中的 COMPRESS_INFORMATION_CLASS_BLOCK_SIZE 选项。 建议最小大小为 1 MB,以获得更好的压缩比。 决定使用哪种压缩 API 模式

在开发人员选择压缩算法后,下一个决定是压缩 API 的两种模式中的哪一种模式:缓冲模式或块模式。 开发缓冲模式是为了方便使用,在大多数情况下建议使用。

缓冲区模式自动将输入缓冲区拆分为适合所选压缩算法的大小块。 缓冲区模式自动设置格式,并将未压缩的缓冲区大小存储在压缩缓冲区中。 压缩缓冲区的大小不会自动保存,应用程序需要保存该大小以用于解压缩。 调用 CreateCompressor 和 CreateDecompressor 以使用缓冲区模式时,请勿在 Algorithm 参数中包含 COMPRESS_RAW 标志。 有关缓冲区模式应用程序的代码示例,请参阅 在缓冲区模式下使用压缩 API 部分。

块模式使开发人员能够控制块大小,但应用程序需要完成更多工作。 使用块模式时,应用程序在压缩时必须将输入数据分解为大小合适的片段,然后在解压缩时将这些部分重新放在一起。 如果输入缓冲区的大小大于压缩算法的内部块大小,则块模式失败。 对于 MSZIP,内部块大小为 32KB,XPRESS 压缩算法为 1GB。 LZMS 的内部块大小可配置为 64GB,内存使用量会相应增加。 压缩缓冲区的大小不会自动保存,应用程序还需要保存此大小以用于解压缩。 Decompress的 UncompressedBufferSize 参数的值必须完全等于未压缩数据的原始大小,而不仅仅是输出缓冲区的大小。 这意味着,使用块模式时,应用程序应保存未压缩数据的确切原始大小以及压缩数据和压缩大小。 调用 CreateCompressor 和 CreateDecompressor 以使用块模式时,在 Algorithm 参数中包含 COMPRESS_RAW 标志。 有关块模式应用程序的代码示例,请参阅 在块模式下使用压缩 API 部分。

自定义内存分配

缓冲区和块模式应用程序在调用 CreateCompressor 和 CreateDecompressor 时可以选择指定自定义内存分配例程。 AllocationRoutines 参数指定包含内存分配例程的COMPRESS_ALLOCATION_ROUTINES结构。 然后,应用程序可以使用 SetCompressorInformation 设置压缩器的块大小。 有关简单自定义分配例程的示例,请参阅 在块模式下使用压缩 API 部分。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3