首页 >后端开发 >Golang >与 Python 的 zlib 库相比,为什么 Go 的 flate 包会产生不同的压缩输出?

与 Python 的 zlib 库相比,为什么 Go 的 flate 包会产生不同的压缩输出?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-30 17:47:03439浏览

Why does Go's flate package produce a different compressed output compared to Python's zlib library?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn