在java中有效地将多个数字写入File

时间:2018-01-19 17:38:39

标签: java types int short

我需要使用java以非常高效的内存方式向文件写入大量的Numbers。

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

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

我怎么能实现呢?

1 个答案:

答案 0 :(得分: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。