我需要使用java以非常高效的内存方式向文件写入大量的Numbers。
数字的范围是0到2,132,487,因此短数据类型(16位)不够,但整数(32位)会浪费空间。
最有效的方法是为每个数字使用22位数(2²²= 4,194,394)
我怎么能实现呢?
答案 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。