Java中的高性能varint和varlongs是否有任何策略(或库)?

时间:2012-05-22 07:12:39

标签: java

目前,我正在使用DataOutput.writeLong(long)序列化一些长数据。这个问题很明显:很多情况下,长期数量很少。我想知道最高性能的varint实现是什么?我已经看到了协议缓冲区的策略,以及对随机长数据的测试(这可能不是正确的测试分析),我看到了相当大的性能下降(大约慢3-4倍)。这是预期的吗?有没有什么好的策略可以在保存空间的同时尽快序列化多头?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如何使用标准DataOutput格式序列化并使用GZIPOutputStream这样的通用压缩算法进行压缩?

答案 1 :(得分:0)

协议缓冲区编码实际上相当不错,但对随机长片没有帮助 - 如果你的多数可能是小的正数或负数(假设在+/- 1000范围内95%时间)。

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

当然,计算此编码会产生一些性能开销,但如果您使用此编码进行序列化,则CPU时间无论如何也不会成为您的瓶颈 - 因此您可以有效地忽略编码成本。