压缩小块数据

时间:2012-08-15 01:22:50

标签: json compression zlib libz text-compression

我有一个4GB的缓冲区,包含类似JSON格式的数据。我需要添加更多的信息(最多可以说是3倍),但我必须适应这一小块内存。我正在考虑使用libZ压缩文本,但我担心它不会表现良好,因为数据主要包含一些独特的子串。在这种情况下你会推荐什么? 谢谢, 克里斯

2 个答案:

答案 0 :(得分:4)

考虑一个固定字典,其中包含您希望在数据中出现的最多32K字符串。您将在每端使用zlibdeflateSetDictionary()inflateSetDictionary()(分别是数据的发送方和接收方),并在两端使用相同的字典。这可能会让你得到你正在寻找的压缩。没有字典,你就不太可能通过如此少量的数据进行那种压缩。

答案 1 :(得分:0)

如果您真的想坚持使用压缩,那么使用利用数据特定结构的自定义词典的压缩算法将表现最佳。我用SharpZipLib实现了类似的东西。

如果您想在缓冲区中存储更多数据并且不使用类似文本数据的压缩,请考虑使用二进制协议,例如Google的协议缓冲区。

<强>更新

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