2013-05-01 61 views
0

我试图从系统中导出某些文件并将其保存在我的驱动器中,问题是某些文件非常大,并且我得到了java内存不足错误。使用fileoutstream的Java内存不足

FileOutputStream fileoutstream = new FileOutputStream(filenameExtension); 
fileoutstream.write(dataManagement.getContent(0).getData()); 
fileoutstream.flush(); 
fileoutstream.close(); 

任何recomendation我可以试试,我添加了刷新,但是现在性差异,这将调用导出方法,生成和保存该文件。我使用cursos来运行数据,我输出的不是数组,我尝试添加更多的内存,但文件太大。

+0

以chunks读取和写入文件。在写入大量XXX数据量后,请定期刷新输出流。 – NINCOMPOOP 2013-05-01 16:23:34

回答

1

如果文件真的很大,您可能需要读取/写入块。如果文件足够大以适应内存,则可以增加虚拟机内存的大小。

即:

java -Xmx512M ... 


FileInputStream fi = infile; 
FileOutputStream fo = outfile 
byte[] buffer = new byte[5000]; 
int n; 
while((n = fi.read(buffer)) > 0) 
    fo.write(b, 0, n); 

希望这有助于获得的想法。

+0

我尝试添加1500m的内存,但是显示效果不错,文件类似于300m,任何有关如何以块来读取和写入的示例 – user1725253 2013-05-01 16:29:17

+0

已更新伪代码示例以显示如何完成此操作。 – Devolus 2013-05-01 18:17:49

2

在写入文件之前,您正在将整个文件加载到内存中。相反,你应该:

  1. 负荷只有一个数据块
  2. 重复上面的你处理完所有的数据,直到步骤。