【问题标题】:iOS compression_encode_buffer doesn't include zlib header?iOS compression_encode_buffer 不包含 zlib 标头?
【发布时间】:2016-02-08 21:28:48
【问题描述】:

我在 iOS 应用程序中使用 compression_encode_bufferCOMPRESSION_ZLIB 对数据进行 zlib 压缩,但结果缺少 zlib 标头。

例如:

size = compression_encode_buffer(
    destinationBuffer, destinationBufferSize,
    sourceBuffer, sourceBufferSize, nil,
    COMPRESSION_ZLIB
)

将返回字节:

AD 53 C1 8E 9B 30 …

例如,在同一数据上使用 Python 的 data.encode("zlib") 时将返回:

78 9C AD 53 C1 8E 9B 30 …
^^ ^^ correct zlib header

那是怎么回事?为什么不包含标题?有没有“正确”的添加方式?

【问题讨论】:

    标签: ios swift zlib


    【解决方案1】:

    这两个字节是一个 zlib 标头,而不是一个幻数。很可能您也丢失了流的最后 4 个字节(ADLER32 校验和),并且只有您希望包装在 zlib 数据流中的“放气”数据流。 iOS documentation 说了这么多:

    ZLIB
    The encoded format is the raw DEFLATE format as described
    in IETF RFC 1951 Using the ZLIB library
    

    他们应该将压缩方法称为“DEFLATE”而不是“ZLIB”。

    请参阅related question,了解如何处理 ZLIB 与 DEFLATE 数据。

    【讨论】:

    • 这很有趣。他们犯了与 HTTP 作者在将 zlib 包装的流称为“deflate”时所犯的完全相反的错误。
    • 有没有办法从 iOS 中获取“headerful/checksum”zlib 的东西呢?不诉诸第三方进口?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-09-21
    • 2022-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多