繁体   English   中英

读取大型txt文件时在模拟器上出现OutOfMemoryError

[英]OutOfMemoryError on emulator while reading large txt file

我有一个很大的txt文件,其中包含200,000多行。 每行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;
}

不建议将如此大的文件加载到内存中,因为您不确定Android设备上是否有可用的硬件资源。

我建议您改用sqlite数据库。 它不仅允许您加载数据,而且还可以方便地进行搜索和修改操作。

如果您确实希望在仿真器中工作,可以增加RAM大小。

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

这是针对您特定问题的解决方案,但您会考虑使用数据库,如其他答案所建议的那样。

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

但我认为您的问题还有其他问题。 您是否增加了模拟器内存​​(设备内存大小)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM