【问题标题】:Best way to read data from 16MB file without freezing the app从 16MB 文件中读取数据而不冻结应用程序的最佳方法
【发布时间】:2019-06-03 10:14:56
【问题描述】:

我有一个问题,找不到好的解决方案。我需要读取一个包含大量数据的文本文件(文件有 16MB)。该文件包含 12 列,每一列都有整数值。通常我的问题是如何在不冻结应用程序的情况下执行此操作。我的文件在我的项目的资产文件夹中,我尝试使用这样的东西:

AssetManager assetManager = this.getAssets();
try {
    InputStream inputStream = assetManager.open("3333.ecg");
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    String str;
    while ((str = bufferedReader.readLine()) != null) {
        stringBuilder.append(str);
    }
} catch (IOException e) {
    e.printStackTrace();
}

但应用程序冻结。我的目标是从每一列中获取数据并将其保存到整数数组列表中。我正在寻找一些建议。

提前致谢。

【问题讨论】:

  • 你试过在background thread?上运行代码
  • 你唯一需要做的就是在主线程之外进行
  • 您可以使用AsyncTask 异步读取它。你不应该在主线程中进行昂贵的操作。
  • 感谢您的回答,最终我计划在单独的线程中执行此操作,但我认为我做错了其他事情,因为 16 mb 对我来说似乎没有那么大,应用程序应该更快地读取文件.

标签: java android


【解决方案1】:

使用它在后台运行它:

AsyncTask.execute(new Runnable() {
   @Override
   public void run() {
    AssetManager assetManager = this.getAssets();
    try {
        InputStream inputStream = assetManager.open("3333.ecg");
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String str;
        while ((str = bufferedReader.readLine()) != null) {
            stringBuilder.append(str);
    }
    } catch (IOException e) {
        e.printStackTrace();
    }
   }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2015-02-09
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多