在通过网络发送数据包之前压缩数据包的最佳压缩算法是什么?数据包使用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的容器中的问题很简单,我认为可以说,这是“读者的一种练习”。)