Golang 和 Python zlib 差异
当比较使用 Python 的 zlib 库和 Go 的 flate 包压缩字符串的结果时,出现了差异。在这个问题中,Python 版本生成的输出带有额外的零字节,而 Golang 版本则没有。
差异源于两个库采取的不同方法。 Python 的 zlib 将数据压缩为 zlib 格式,其中包括标头和校验和。相比之下,Go 的 flate 直接实现 DEFLATE 算法,生成没有标头或校验和的原始 DEFLATE 流。
要从 Go 获得相同的输出,请修改代码以在写入压缩数据后显式刷新缓冲区:
<code class="go">func compress(source string) []byte { buf := new(bytes.Buffer) w, _ := flate.NewWriter(buf, 7) w.Write([]byte(source)) w.Flush() return buf.Bytes() }</code>
但是,需要注意的是,不同压缩库的输出可能不是逐字节相同的。虽然他们的目标是兼容性,但具体的实现细节可能会导致变化。
以上是与 Python 的 zlib 库相比,为什么 Go 的 flate 包会产生不同的压缩输出?的详细内容。更多信息请关注PHP中文网其他相关文章!