2

20 万行を超える大きな 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;
}
4

3 に答える 3

3

Android デバイスで利用可能なハードウェア リソースを確認できないため、このような大きなファイルをメモリにロードすることはお勧めできません。

代わりに sqlite データベースを使用することをお勧めします。データをロードできるだけでなく、検索や変更操作も簡単になります。

于 2012-10-21T12:43:48.277 に答える
1

これをエミュレータで本当に動作させたい場合は、RAM サイズを増やすことができます。

これは、AVD イメージを作成するときに実行できます (「ハードウェア」オプションに「最大 VM アプリケーション ヒープ サイズ」オプションがあります)。この値のデフォルトは 24 です。256 以上を指定する必要があります。

これは特定の問題の解決策ですが、他の回答が示唆するように、代わりに DB を使用することを考えています。

于 2012-10-21T13:25:01.600 に答える
0

200K は Android デバイスでは比較的大きいため、db を使用する必要があります。

しかし、あなたの問題は別のものだと思います。エミュレータのメモリ (デバイスの RAM サイズ) を増やしましたか?

于 2012-10-21T13:02:50.837 に答える