在我的应用程序中,我需要尽快从文件中读取80K整数。所以我尝试用nio完成它,使用FileChannel和ByteBuffer(在本例中为IntBuffer)来编写和读取整数数组。
以下是代码示例
public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{
FileInputStream fis = context.openFileInput(filename);
FileChannel ch = fis.getChannel();
MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());
IntBuffer ibuff = mbuff.asIntBuffer();
int[] array = new int[ibuff.limit()];
ibuff.get(array);
fis.close();
ch.close();
return array;
}
在我的机器上它工作完美,结果为6-7毫秒,但在Android执行时,此方法需要900毫秒。当我使用这种方法从文件中读取其他基元时,会发生同样的事情。
我不认为有必要描述我的模拟设备的特性,但它们是:
还有一件事:当我读取具有相同长度的字节数组时,使用FileInputStream只需2-3毫秒,而在我的mashite中需要0.5毫秒。所以你可以看到差异。
任何想法将不胜感激)提前致谢
修改
最近我已经完成了一些测试,所以这里有结果