Java:需要优化(快速)方法将整数数组写入FileOutputStream

时间:2013-10-27 06:37:45

标签: java arrays

搜索会产生很多关于如何将int转换为byte []的问题。我有一个带有关键循环的项目,它将long int []写入FileOutputStream。 FileOutputStream需要一个byte []进行写入。我可以蛮力不同的方法;我正在寻找一种方法将int []直接发送到FileOutputStream或将int []转换为byte []的最快方法 - 就像包装缓冲区一样。我看到了将byte []转换为int []和float []的方法...但是没有其他方式(从int []到byte [])。感谢。

更新:仍然希望避免内存映射I / O的复杂性(或现在试验),直到需要得到证实。下面的注释促使我查看创建一个ByteBuffer,将其包装在IntBuffer中,将int写入IntBuffer,然后从ByteBuffer中提取byte []以发送到FileOutputStream。显而易见的替代方法就是直接使用byte [],这要求我将数据作为字节而不是整数来操作,我可以这样做 - 但与byte [] / ByteBuffer相比,它的效率(如果有的话)有多高效/ IntBuffer包装方案?

2 个答案:

答案 0 :(得分:2)

你的瓶颈最有可能是你的磁盘IO,所以你在CPU中所做的并不重要。我会确保你试图解决一个会对你的应用产生影响的问题。

如果你有一个快速的磁盘子系统并且你有短暂的数据突发,你的CPU可能很重要,转换的最快方法是避免首先执行转换,即不要使用{{ 1}}。例如,如果OpenHFT / Java Chronicle采用byte[]值并将其作为32位值直接写入内存映射文件内存区域。这意味着每次写入都包含一个机器代码指令,平均需要大约1.5 ns。

答案 1 :(得分:0)

尝试ObjectOutputStream.writeObject(intArray)。您可以稍后使用ObjectIntputStream.readObject

读取它