2013-05-01 97 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. 重複上面的你處理完所有的數據,直到步驟。