【问题标题】:Zlib compression in boost::iostreams not compatible with zlib.NETboost::iostreams 中的 Zlib 压缩与 zlib.NET 不兼容
【发布时间】:2010-05-12 21:27:02
【问题描述】:

我想在我的 C# 之间以 ZLIB 格式将压缩数据发送到 C++ 应用程序。在 C++ 中,我使用 boost::iostreams 中的 zlib_compressor/zlib_decompressor。在 C# 中,我目前正在使用 zlib.NET 库中提供的 ZOutputStream。首先,当我使用两个库压缩相同的数据时,结果看起来不同:

  1. boost::iostreams::zlib_compressor:

63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00

  1. zlib.NET (zlib.ZOutputStream):

78 9C 63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00 4F 31 63 8D

(注意 zlib.NET 中存在的 78 9C 模式,但 boost 中没有)。

此外,当我在 boost 中解压缩在 zlib.NET 中压缩的数据时,我无法从流中读取数据,提示有问题。当我尝试解压缩在 boost 中压缩的数据时,它确实有效。

有人知道怎么回事吗?

谢谢,

约翰

【问题讨论】:

    标签: c# compatibility zlib boost-iostreams


    【解决方案1】:

    这是因为 boost::iostreams::zlib_compressor 代码生成原始压缩数据,而 zlib.NET 添加页眉和页脚以便数据采用压缩格式。

    作为证据,请考虑以下 Tcl 会话日志:

    % set s {78 9C 63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00 4F 31 63 8D}
    78 9C 63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00 4F 31 63 8D
    % set b [binary format H* [join $s ""]];string length $b
    23
    % zlib decompress $b
    ðStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringString
    % zlib inflate $b
    data error
    % set s {63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00}
    63 61 60 60 F8 00 C4 C1 25 45 99 79 E9 23 87 04 00
    % set b [binary format H* [join $s ""]];string length $b
    17
    % zlib decompress $b
    data error
    % zlib inflate $b
    ðStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringString
    

    zlib decompress 命令以“压缩”格式扩展数据,zlib inflate 命令以“原始压缩”格式扩展数据。)

    【讨论】:

    • 考虑到底层库很好地支持它们,boost 库似乎不遗余力地默认将非原始格式置于遥不可及的范围内,这也很奇怪。我想一定是某种哲学上的东西。
    • 谢谢,帮助很大。原来我无意中通过了 no_header 选项来 boost... 哎呀!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多