我会尝试澄清我的问题。
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/