【问题标题】:Out of memory when storing lines from txt to ArrayList将行从 txt 存储到 ArrayList 时内存不足
【发布时间】:2013-06-10 15:42:09
【问题描述】:

我真的不知道这有什么问题,我想逐行读取 txt 文件(目前只有 10 行)并存储一些名为 mChoices 的数组列表中的每一行。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quiz_vieaaaw);
        try {
            InputStream inputStream = getApplicationContext().getAssets().open("questions.txt");
            BufferedReader buffReader = new BufferedReader(new InputStreamReader(inputStream));
            String line = buffReader.readLine();
            while (line != null) {
            mChoices.add(line);
            }
            inputStream.close();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
        for (int i=0; i < mChoices.size(); i++) {
            String line = mChoices.get(i);
            Log.d("LINE", line);
        }
    }

}

我在分配 13571696 字节时内存不足。

如果我在条件下注释掉它只会返回第一行,但显然我想要 txt 中的每一行。

谢谢

【问题讨论】:

    标签: java android io


    【解决方案1】:
    while (line != null) {
         mChoices.add(line);
     }
    

    您每次都需要更新该行,否则您将始终读取第一行(在您的情况下它不为空,因此您将在第一行写入无限次,直到有可用内存为止)。
    要在每次迭代时更新行,请执行以下操作:

    String line;
    while ((line = buffReader.readLine()) != null) {
            mChoices.add(line);
    }
    

    【讨论】:

    • 哇,不敢相信我错过了 xD 谢谢,在允许的情况下会接受,10 分钟后就可以了
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 2013-10-29
    • 2016-05-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多