Android SDK快速读取文件中的基元

时间:2015-05-18 12:22:27

标签: android performance nio

在我的应用程序中,我需要尽快从文件中读取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毫秒。当我使用这种方法从文件中读取其他基元时,会发生同样的事情。

我不认为有必要描述我的模拟设备的特性,但它们是:

  • 1907 RAM
  • ARM CPU
  • 64 VM堆
  • 数据分区 - 100 M

还有一件事:当我读取具有相同长度的字节数组时,使用FileInputStream只需2-3毫秒,而在我的mashite中需要0.5毫秒。所以你可以看到差异。

任何想法将不胜感激)提前致谢

修改

最近我已经完成了一些测试,所以这里有结果

  • Sony Ericsson Experia,最佳时间为104毫秒,最差时间为270毫秒
  • Nexus 7的最佳时间为20.14毫秒,恶化为48.36
  • 三星Galaxy Note 10.1(2014年版)最佳时间为1.16毫秒,最差时间为5.82(XD这是我的孩子)

0 个答案:

没有答案