Java readFully as int []

时间:2014-08-17 16:08:36

标签: java randomaccessfile

我有一个RandomAccessFile fileA,其大小为4*k,它是通过DataOutputStream.writeInt()方法使用的。 我希望将其完整地读入数组int[k]

最快的方法是什么?

我在DataInputStream周围考虑了BufferedInputStream并且还使用了readFully(),然后手动移动了这些位,但我不确定第二个实际上会有多快,考虑到开销读一个额外的时间。我还没有考虑java.nio

TL; DR:快速(est)方式将整数文件完全读入int[]

编辑:我在远程机器上运行它,我只能访问JVM内存,但无法存储地图文件。

1 个答案:

答案 0 :(得分:0)

在1000个批次中对不同大小的文件运行50次基准测试时,我得出结论,方法A和方法B(下面)之间的性能差异是微不足道的,时间差异小于1%。其他方法还有待测试,我希望有人确认或否认我的结果的有效性。

方法A:

for (int k = 0; k < fileIntLength; k++){
    ints[k] = read.readInt();
}

方法B:

byte[] temp = new byte[fileIntLength*4];
read.readFully();
if (temp.length > 0){
    ints = ByteBuffer.wrap(temp).asIntBuffer().array();
}

编辑:注意到随着Java将部件编译成机器代码,速度也在提高。但在每种情况下,速度增加几乎相同。在前几种情况下,每种情况下3000个任意单位时间,在java优化时减少到2800。