读取大文本文件时模拟器上的OutOfMemoryError

时间:2012-10-21 12:28:47

标签: java android

我有大量的txt文件,包含超过200k行。每行1个字。 我需要加载这个文件中的所有单词,它在我的Nexus 7上运行正常,但是当我尝试在模拟器上启动我的应用程序时,我得到OutOfMemoryError。问题出在哪里?我想确保手机用户不会有这样的错误。

    public static ArrayList<String> getWords(Context context) throws IOException {

    ArrayList<String> words = new ArrayList<String>(300000);

    InputStream is = context.getAssets().open("words.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));

    String word;
    while ((word = br.readLine()) != null) {
        words.add(word.toUpperCase());
    }

    is.close();
    br.close();

    return words;
}

3 个答案:

答案 0 :(得分:4)

不建议在内存中加载这么大的文件,因为你无法确定Android设备上的硬件资源。

我建议您使用sqlite数据库。它不仅允许您加载数据,还便于搜索和修改操作。

答案 1 :(得分:1)

如果您真的想在仿真器中使用它,可以增加RAM大小。

您可以在创建AVD映像时执行此操作(“硬件”选项中有“最大VM应用程序堆大小”选项)。此值的默认值为24,您需要输入256或更高。

这是针对您特定问题的解决方案,但您可以考虑使用数据库,正如其他答案所示。

答案 2 :(得分:0)

200K对于Android设备来说相对较大,因此你必须使用db。

但我认为你的问题不是别的。 你增加了模拟器内存​​(设备柱塞尺寸)吗?