2013-04-18 183 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

另一种选择是只保存文件在内存中的索引。这取决于你想用它做什么。

例如,如果您希望在屏幕上显示文件内容,您可以打开文件进行随机访问并扫描它,记录文件中每行开头的偏移量。然后,您可以通过在索引中查找每条线来寻找每条线,寻找指定的位置并从那里读取。