【问题标题】:OutOfMemoryError on emulator while reading large txt file读取大txt文件时模拟器上的OutOfMemoryError
【发布时间】:2012-10-11 11:00:54
【问题描述】:

我有一个包含超过 200k 行的大型 txt 文件。每行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 设备的内存通常(非常)有限。
  • 添加堆栈跟踪会有所帮助。

标签: java android


【解决方案1】:

如果您真的希望它在模拟器中工作,您可以增加 RAM 大小。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-09-01
        • 1970-01-01
        • 2014-09-30
        • 2015-06-21
        • 2019-08-17
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多