[英]Java readFully as int[]
我有一个RandomAccessFile
fileA
,大小为4*k
,它是通过使用诸如DataOutputStream.writeInt()
方法之类的方法制成的。 我希望将其完整读入数组int[k]
。
最快的方法是什么?
我考虑过在BufferedInputStream
周围使用DataInputStream
并也使用readFully()
然后手动移位这些位,但是由于要多花一点时间读取它的开销,因此我不确定第二个实际上将有多快。 我还没有考虑到java.nio
。
TL; DR:将整数文件完全读入int[]
最快方法。
编辑:我在只能访问JVM内存但无法存储映射文件的远程计算机上运行此命令。
在以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个时间单位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.