Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从16MB文件读取数据而不冻结应用程序的最佳方法_Java_Android - Fatal编程技术网

Java 从16MB文件读取数据而不冻结应用程序的最佳方法

Java 从16MB文件读取数据而不冻结应用程序的最佳方法,java,android,Java,Android,我有个问题,找不到好的解决办法。我需要读取一个包含大量数据的文本文件(文件有16MB)。该文件包含12列,每列中包含整数值。一般来说,我的问题是如何做到这一点而不冻结应用程序。我的文件位于项目的资产文件夹中,我尝试使用以下内容: AssetManager assetManager = this.getAssets(); try { InputStream inputStream = assetManager.open("3333.ecg"); BufferedReader buf

我有个问题,找不到好的解决办法。我需要读取一个包含大量数据的文本文件(文件有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();
}
但应用程序冻结了。我的目标是从每列中获取数据,并将其保存到整数数组列表中。我在寻求一些建议


提前感谢。

使用此选项在后台运行:

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

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