iOS compression_encode_buffer不包含zlib头?

时间:2016-02-08 21:28:49

标签: ios swift zlib

我正在compression_encode_buffer使用COMPRESSION_ZLIB对zlib压缩iOS应用中的数据,但结果是缺少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

这是怎么回事?为什么不包含标题?是否有一种“正确”的方式来添加它?

1 个答案:

答案 0 :(得分:4)

这两个字节是一个zlib标头,而不是一个幻数。很可能你也错过了流的最后4个字节(ADLER32校验和),并且只有" deflate"您希望将数据流包装在zlib数据流中的数据流。 iOS documentation同样说:

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

他们应该调用压缩方法" DEFLATE"不是" ZLIB"。

有关处理ZLIB与DEFLATE数据的信息,请参阅此related question