【问题标题】:Compactly serializing 64 bit integers紧凑地序列化 64 位整数
【发布时间】:2017-03-02 06:32:41
【问题描述】:

有哪些技术可用于通过网络有效地发送大量整数列表?

我有 100k - 1M(已排序)整数需要序列化并通过网络发送。

我能想到的一种简单技术是将它们中的每一个编码为 base36 以减小大小。

【问题讨论】:

  • 为什么要对它们进行编码(作为base36)而不是只为每个值发送64位(小于base36编码)?顺便说一句,这有帮助吗:stackoverflow.com/questions/12664432/… ?
  • 请查看其他帖子 stackoverflow.com/questions/283299/… 有一个 Java 库的引用
  • Base36 将增加大小。您要改进发送 64 位的基本方法的唯一方法是,如果您知道有关数字的一些属性:它们很小吗?它们是重复的吗?
  • 响应格式是json,所以每个数字最终都会占用一个字节,我可以尝试另一种序列化格式。

标签: java arrays networking compression


【解决方案1】:

如果列表很大,您可以在序列号上应用 zip 以减小大小。 Base36 确实可以缩小尺寸。

进一步的优化需要一些关于数字的信息和假设。

例如,当数字被排序时,您可以发送第一个“完整”数字,其余的数字与前一个“完整”数字之间的差异。

更进一步,如果您可以保证 2 个邻居之间的差异小于 32 位数字 (Integer.MAX_VALUE),您可以在 64 位空间上放置 2 个数字:delta1 + (delta2 << 64)

但如前所述,所有其他优化都依赖于有关数字的信息。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多