在java中高效地将许多数字写入文件

在java中高效地将许多数字写入文件,java,types,int,short,Java,Types,Int,Short,我需要用java以非常节省内存的方式将大量数字写入文件 数字的范围从0到2132487,因此短数据类型(16位)不够,而整数(32位)会浪费空间 最有效的方法是为每个数字使用22位(2位=4194394) 如何实现这一点?分配22位将非常困难,但您可以分配24位(3字节) 一种简单的方法是将每个数字转换为字节数组。使用来自的ByteBuffer 它给出0x0 0xe 0xb3 这假设没有使用最高有效字节-如问题中所述 当读回文件时,请确保在转换回整数之前将字节填充回4。请列出您已经尝试过的内容。

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

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

最有效的方法是为每个数字使用22位(2位=4194394)


如何实现这一点?

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

一种简单的方法是将每个数字转换为字节数组。使用来自的ByteBuffer

它给出0x0 0xe 0xb3

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


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

请列出您已经尝试过的内容。可能是使用简单的东西(32位),压缩得到的流“足够”满足您的需要。“非常大的数量”和“非常高效的内存”非常广泛。10个数字,10000000个数字还是1000000000000个数字?~90000000个数字。我不想使用任何不编码任何信息的比特,但我不需要压缩,因为这可能会变得过于复杂,如果你想做这种低级的东西,你可能会更容易使用C或C++。
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);
}