首页 > 后端开发 > Golang > 为什么 Python 和 Go 的 zlib 实现对同一字符串产生不同的输出?

为什么 Python 和 Go 的 zlib 实现对同一字符串产生不同的输出?

DDD
发布: 2024-10-29 05:50:02
原创
392 人浏览过

  Why Do Python and Go's zlib Implementations Produce Differing Outputs for the Same String?

Python 与 Go zlib 输出差异

在比较 Python 和 Go 的 zlib 实现的输出时,压缩字符串时会出现明显的差异“富”。 Python 版本返回第五个字节设置为 0 的输出,而 Go 版本则在其位置输出 4。

压缩参数

要理解这种差异,请执行以下操作:检查所使用的压缩参数至关重要。 Go 代码使用 flate.NewWriter,它生成压缩级别为 7 的 DEFLATE 流。等效的 Python 代码利用 DEFLATED 方法和 -15 的压缩级别初始化 zlib.compressobj。

输出差异

核心差异在于每个实现的字节输出。默认情况下,Python zlib 在使用 zlib.Z_FLUSH 处理输入后刷新缓冲区。这对应于 Go 实现的 zlib.Z_SYNC_FLUSH。然而,在 Go 代码中,对 Writer 对象调用 Close() 表示流的结束,并生成完整的 zlib 输出。

解决差异

到为了从 Go 代码中获得所需的输出,Close() 可以替换为 Flush()。此操作模拟 Python 的行为,刷新缓冲区并终止流。或者,要从 Python zlib 获取原始、完整的 DEFLATE 流,可能需要进一步调查,因为默认输出格式是 zlib 格式。

含义

比较不同压缩库的输出并不是一个可靠的方法。虽然数据应保持兼容,但由于实现特定的细微差别,实现字节到字节的匹配具有挑战性。

以上是为什么 Python 和 Go 的 zlib 实现对同一字符串产生不同的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板