【发布时间】:2019-07-12 14:07:18
【问题描述】:
我会尽量澄清我的问题。
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
那么...为什么我的压缩缓冲区比原始的非压缩字符串大?
编辑:当有人试图了解为什么会发生某事时,投反对票的巨魔很可笑。我想我应该只是盲目地接受它而不是问。
【问题讨论】:
-
因为原来只有78个字节。 Gzip 不会神奇地使字节变小。它需要足够大的语料库来找到足够多的重复字节序列以使压缩有效。
-
供参考,gzip 使用 DEFLATE 算法:en.wikipedia.org/wiki/DEFLATE
-
@Adrian。谢谢。对我来说,这似乎是一个问题。很多人盲目地在他们的 json 上使用 gzip,认为它变得更小了。我想可以肯定的是,您必须在代码中进行这样的练习才能确定 gzip 是否值得。
-
任何工具都会被那些在没有完全理解的情况下选择使用它的人误用。 Gzip 对小型有效负载和任何没有大量重复字节序列的有效负载(例如,任何已经压缩的东西,如 JPEG 或 MP3,或加密数据)无效。一般 gzip 开始对 500~1000 字节标记左右的纯文本生效,并且在更大的有效负载下更有效。