首页 > 后端开发 > Golang > 正文

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

Mary-Kate Olsen
发布: 2024-10-30 17:47:03
原创
319 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!