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中文网其他相关文章!