我有一个RandomAccessFile
fileA
,其大小为4*k
,它是通过DataOutputStream.writeInt()
方法使用的。
我希望将其完整地读入数组int[k]
。
最快的方法是什么?
我在DataInputStream
周围考虑了BufferedInputStream
并且还使用了readFully()
,然后手动移动了这些位,但我不确定第二个实际上会有多快,考虑到开销读一个额外的时间。我还没有考虑java.nio
。
TL; DR:快速(est)方式将整数文件完全读入int[]
?
编辑:我在远程机器上运行它,我只能访问JVM内存,但无法存储地图文件。
答案 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。