使用fileoutstream的Java内存不足

时间:2013-05-01 16:20:32

标签: java io fileoutputstream

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

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

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

3 个答案:

答案 0 :(得分:2)

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

  1. 仅加载一大块数据
  2. 写下来
  3. 重复上述步骤,直到处理完所有数据为止。

答案 1 :(得分: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);

希望这有助于实现这个想法。

答案 2 :(得分:0)

您可以使用spring批处理框架以块大小读取和写入文件。 http://static.springsource.org/spring-batch/