2012-10-21 55 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或更高。

這是針對您的特定問題的解決方案,但您考慮使用數據庫來代替,如其他答案所示。

相關問題