Android 种加快文件读取速度的方法

Android ways to speed up few readings from files

在我的应用程序中,我需要在应用程序启动时加载一些文件。我有 6 个不同的文件,其中包含 int 数组,我需要尽快读取它们。其中 3 个包含 80K 整数,其他 200K 整数

这是我用来从文件中读取 int 数组的方法

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;
}

如您所见,我正在使用 nio 读取数组。 这是测试结果,当我重新编辑单个文件时,内容为 80K ints

所以对于单次阅读它工作正常,但是当我阅读所有 6 个文件(我上面提到的)时,结果将如下

首先,我不明白为什么缓存在第一次读取后没有启动,就像在 PC 上一样。

此时我有2个想法

  1. 找到一种更好的读取文件的方法(但据我所知,nio 是从文件中读取基元的最快方法)
  2. 使用 MT 编程并将文件读取放到线程中,这将加快速度,但仅适用于 CPU 具有多个内核的设备,对吗?

我听说 Async Task 有点像线程,它对我的​​目的有帮助吗?

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

线程不仅用于并行计算,它们还用于更好的用户体验,因此用户仍然可以在应用程序在后台执行操作时与应用程序交互。 AsyncTask 非常好,尽管如果您的时间不够,正确编写的简单线程应该会更快。

现在,如果应用加载文件,您可以分段加载(例如每个文件的 10%),显示这些部分,然后在后台继续加载其余部分。

我认为尝试更快地阅读是错误的方向,因为这非常依赖于硬件。无论您多么努力,有些设备都会很慢。考虑一个适用于所有情况的用户体验。

希望对您有所帮助