2013-04-18 178 views
0

我有字符串緩衝區變量,它保存從文件中讀取的輸入。有些情況下我獲得巨大的輸入文件。在這些情況下,我得到OutOfMemoryError。字符串緩衝區 - OutOfMemoryError

這裏是我的代碼:

StringBuffer response = new StringBuffer(""); 
BufferedReader in = new BufferedReader(isr); 
String inputLine; 
while ((inputLine = in.readLine()) != null) 
     response.append(inputLine); 
in.close(); 

請幫助我如何解決這個問題。

+0

你使用哪個IDE? –

+4

將文件的全部內容加載到內存中並不是一個好主意。 你想通過將所有東西加載到內存中來解決什麼目的?你可以解釋一下用例 – Rohit

+0

要麼購買更多的內存,要麼逐行處理文件。 –

回答

1

要麼以大塊讀取輸入,要麼將JVM中的-Xmx參數(最大內存大小)更改爲較大的大小。

+0

使用-Xmx調用java類的第二個選項對我有用。希望它不會導致任何內存問題。感謝您的意見。 – Navin

1

如果您正在處理的文件很大,您可能需要找到一種方法來即時處理該文件,而不是將整個文件讀入內存中的StringBuffer。根據數據結構的不同,這可能會對讀入的每行或每幾行執行一些操作。

0

另一種選擇是隻保存文件在內存中的索引。這取決於你想用它做什麼。

例如,如果您希望在屏幕上顯示文件內容,您可以打開文件進行隨機訪問並掃描它,記錄文件中每行開頭的偏移量。然後,您可以通過在索引中查找每條線來尋找每條線,尋找指定的位置並從那裏讀取。