【问题标题】:Writing many numbers to File in java efficiently [closed]在java中有效地将许多数字写入文件[关闭]
【发布时间】:2018-06-29 00:32:08
【问题描述】:

我需要使用 java 以非常节省内存的方式将大量数字写入文件。

数字的范围是 0 到 2,132,487,因此短数据类型(16 位)是不够的,而整数(32 位)会浪费空间。

最有效的方法是为每个数字使用 22 位 (2²²= 4,194,394)

我该如何实现?

【问题讨论】:

  • 请列出您已经尝试过的内容。
  • 机会是使用简单的东西(32 位)和压缩结果流“足够好”以满足您的需要。
  • “非常大量”“非常节省内存”非常广泛的。 10 个数字、10000000 个数字还是 10000000000000 个数字?
  • ~90,000,000 个数字。我不想使用任何不编码任何信息的位,但我不需要压缩,因为这可能会变得太复杂
  • 如果你想做这种低级的东西,你可能会更容易使用 C 或 C++。

标签: java types int short


【解决方案1】:

分配 22 位会非常困难,但您可以分配 24 位(3 个字节)。

一种简单的方法是将每个数字转换为字节数组。使用来自 https://stackoverflow.com/a/2183279/708790 的 ByteBuffer。

int i = 3763; // For example

byte[] intBytes = ByteBuffer.allocate(4).putInt(i).array();
byte[] lessBytes = Arrays.copyOfRange(intBytes,1, 4);

for (byte b : lessBytes) {
    System.out.format("0x%x ", b);
}

这给出了 0x0 0xe 0xb3。

这假设不使用最高有效字节 - 如问题中所述。

在读回文件时,请确保在转换回 int 之前将字节填充回 4。

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 2016-11-25
    • 2012-05-14
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多