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

为什么 Golang 的'flate”产生与 Python 的'zlib”不同的压缩输出?

DDD
发布: 2024-10-30 19:43:02
原创
145 人浏览过

Why Does Golang's `flate` Produce Different Compression Output Than Python's `zlib`?

Golang 的 zlib 和 Python 的 zlib 之间压缩输出的差异

为了解决 Python 的 zlib 和 Golang 的 flate 之间观察到的不同压缩结果的问题,需要注意的是,它们使用不同的底层实现。

在 Python 中,使用了 zlib,这是一个基于 DEFLATE 的库,以 zlib 格式输出数据。另一方面,Golang 采用了 flate,一种 DEFLATE 实现。

输出差异的原因

观察到的差异源于输出中的第五个字节:Python 的 zlib将其设置为 0,而 Golang 的 flate 将其设置为 4。出现这种差异是因为 Python 的 zlib 配置为在压缩第一个字符串后刷新缓冲区,从而有效地截断输出。

为了在 Golang 中复制 Python 的行为,开发人员可以在压缩器中将 Close() 替换为 Flush():

<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>
登录后复制

兼容性与相同输出

但是,重要的是要认识到即使在调整之后Golang 的函数与 Python 的匹配,不保证结果的逐字节匹配。确保了压缩库之间的兼容性,但可能无法实现相同的输出。

差异源于库实现的固有差异以及压缩过程中使用的特定参数。因此,不建议依赖不同库之间的字节对字节相等。

以上是为什么 Golang 的'flate”产生与 Python 的'zlib”不同的压缩输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

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