json - 压缩的 JSON 比非压缩版本大

标签 json go gzip

我会尝试澄清我的问题。

myJSON 是一个简单的 JSON 字符串。 len(myJSON) = 78

e 是 json.Marshal(myJSON)

据我了解,e 现在是 []byte

然后我像这样 gzip e:

var buf bytes.Buffer
gz := gzip.NewWriter(&buf)
gz.Write(e)
gz.Close()

并且buf.Len() = 96

那么...为什么我的压缩缓冲区比原始的非压缩字符串大?

编辑:当有人试图理解为什么会发生某些事情时,巨魔会否决一个问题,这很有趣。我想我应该只是盲目地接受它而不是去问。

最佳答案

设计一种无损压缩算法来减小每个输入文档的大小在物理上是不可能的。

作为一个思想实验,假设存在这样的压缩器并且可以将任何文档压缩至少一位。

现在假设我生成了最多 N 位长的每个文档。即 1 个长度为 0 的文档、2 个长度为 1 的文档、4 个长度为 2 的文档,依此类推。此序列计算出 2^(N+1)-1 文档总数。

如果我们通过压缩器运行所有文档,压缩版本的长度最多为 N-1 位。这意味着最多可以有 2^N-1 个压缩文档,这比我们开始时要少。要么压缩系统是有损的(在这种情况下解压缩不一定会给我们原始文档),要么某些文档在压缩时必须变大。

关于json - 压缩的 JSON 比非压缩版本大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57008652/

相关文章:

json - 为什么 Reagent 以三种方式呈现 JSON?

go - 使 marshar 从字符串失败

ubuntu - 安装 java - 我应该使用 .rpm 文件还是 .tar.gz?

javascript - json 中的 jquery 值

javascript - 未捕获的语法错误 : Unexpected number when trying to read json data

python - JSON 格式并重新运行一行?

json - 如何将以下划线开头的字段编码为 JSON [Golang]

go - 是否可以使 net.http.ServeMux 匹配整个子树?

node.js - 在 Node 中提供 gzip 文件会在浏览器中抛出 net::ERR_CONTENT_DECODING_FAILED

c# - 在 C# 中解压文本