iOS compression_encode_buffer 不包括 zlib header?

8

我在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

这是怎么回事?为什么标题没有被包含进去?有没有“正确”的添加方式?

1个回答

5
这两个字节是zlib头部,而不是魔术数字。最有可能的情况是你缺少流的最后4个字节(ADLER32校验和),只有你期望包装在zlib数据流中的“deflate”数据流。iOS文档也这样说。
ZLIB
The encoded format is the raw DEFLATE format as described
in IETF RFC 1951 Using the ZLIB library

他们应该把压缩方法称为“DEFLATE”,而不是“ZLIB”。
请参阅相关问题,了解如何处理ZLIB与DEFLATE数据。

1
很有趣。当HTTP作者将zlib包装的流称为“deflate”时,他们犯了完全相反的错误。 - Mark Adler
1
有没有一种方法可以在iOS中获取“带头校验和”的zlib内容?而不需要使用第三方导入? - Travis Griggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接