关于json:压缩小块数据

Compressing small piece of data

我有一个4KB的缓冲区,其中包含类似JSON格式的数据。我需要向它添加更多的信息(最多可以说是3倍),但我必须适应这一小块内存。我曾考虑使用libz来压缩文本,但由于数据主要由一些独特的子字符串组成,所以它的性能可能不太好。在这种情况下你会推荐什么?谢谢,克里斯


考虑一个固定字典,其中包含最多32K个您希望在数据中出现的字符串。您将在每端(数据的发送方和接收方分别)使用zlib的deflateSetDictionary()inflateSetDictionary(),两端使用相同的字典。这可能会给你带来你想要的压力。如果没有字典,那么使用如此少量的数据就不太可能得到这种压缩。


如果您真的想坚持使用压缩,那么使用自定义字典的压缩算法(它利用了数据的特定结构)将发挥最佳效果。我用sharpziplib实现了类似的功能。

如果您希望在缓冲区中存储更多的数据,并且不需要使用像文本一样的数据压缩,可以考虑使用二进制协议,如Google的协议缓冲区。

更新

@马克的回答概述了如何使用zlib的自定义词典。