1

目前,我正在使用DataOutput.writeLong(long). 这样做的问题很明显:在很多情况下多头会非常小。我想知道性能最高的 varint 实现是什么?我已经从协议缓冲区中看到了策略,并在随机长数据上进行了测试(这可能不是要测试的正确分布),我看到了相当大的性能下降(大约慢了 3-4 倍)。这是可以预料的吗?有没有什么好的策略可以在节省空间的同时尽快序列化多头?

谢谢你的帮助!

4

2 回答 2

0

协议缓冲区编码实际上非常好,但对随机多头没有帮助 - 如果您的多头可能是小的正数或负数(假设 95% 的时间在 +/- 1000 范围内),它最有用.

此范围内的数字通常会被编码为 1、2 或 3 个字节,而普通 long 为 8 个字节。尝试在大量 long 上使用这种输入,通常可以节省 50-70% 的空间。

当然,计算这种编码有一些性能开销,但如果你使用它进行序列化,那么 CPU 时间无论如何都不会成为你的瓶颈——所以你可以有效地忽略编码成本。

于 2012-05-22T07:34:37.557 回答
0

使用标准DataOutput格式进行序列化和使用通用压缩算法(例如GZIPOutputStream压缩)如何?

于 2012-05-22T07:17:49.173 回答