2012-10-21 59 views
2

我有大的txt文件,其中包含超过200k行。每行1个字。 我需要加载此文件中的所有单词,它在我的Nexus 7上正常工作,但是当我尝试在模拟器上启动我的应用时,出现OutOfMemoryError。问题出在哪里?我想确保手机用户不会有这样的错误。读取大文本文件时模拟器上出现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; 
} 
+2

您是否考虑过使用数据库? Android设备通常具有(非常)有限的RAM。 – phineas

+0

添加堆栈跟踪会有所帮助。 –

回答

4

这是不可取的加载在内存中这么大的文件,你不能确定的Android设备上可用的硬件资源。

我建议你改用sqlite数据库。它不仅可以让你加载数据,而且还可以方便搜索和修改操作。

0

200K对于android设备来说比较大,所以你必须使用db。

但我认为你的问题是别的。 您是否增加了仿真器内存(设备RAM大小)?

1

如果你真的想在模拟器中工作,你可以增加RAM大小。

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

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

相关问题