繁体   English   中英

Java readFully作为int []

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM