在通过线路发送数据包之前,压缩数据包的最佳压缩算法是什么?数据包使用JSON编码.LZW会是一个好的还是有更好的东西?
我认为两个问题会影响你的答案:
1)如果不知道在程序的任何特定运行中会发生什么,您能够如何预测数据的组成?例如,如果您的数据包如下所示:
{ "vector": { "latitude": 16, "longitude": 18, "altitude": 20 }, "vector": { "latitude": -8, "longitude": 13, "altitude": -5 }, [... et cetera ...] }
- 然后你可能会通过创建一个硬编码的文本字符串字典来获得最好的压缩,这些字典会一直显示在你的数据中,并用适当的字典索引替换其中一个文本字符串.(实际上,如果你的数据是这个规律,你可能要发送刚刚过线的值,只需编写一个函数到客户端从值构造一个JSON对象是否需要一个JSON对象.)
如果您无法预测将使用哪些标头,您可能需要使用LZW或LZ77或其他方法来查看已经通过的数据,以查找它可以以特别紧凑的形式表达的数据.然而...
2)数据包是否需要彼此分开压缩?如果是这样,LZW肯定不是你想要的方法; 它没有时间将其字典构建到一个大小,以便在单个数据包结束时产生大量压缩结果.在这种情况下,恕我直言,获得真正实质性压缩的唯一机会是使用硬编码字典.
(以上所有内容的附录:正如Michael Kohne指出的那样,发送JSON意味着您可能正在发送所有文本,这意味着您使用的带宽不足以发送比您使用的更广泛的字符范围但是,如何将0-127范围内的字符打包成容量为0-255的容器的问题相当简单,我认为可以留作"读者练习",正如他们所说的那样.)
还有两种JSON压缩算法:CJson和HPack HPack做得非常好,与gzip压缩相当.