2012-04-19 36 views
2

我正嘗試從客戶端啓動文件下載。我只有一個包含服務器端二進制文件的InputStream。我不知何故需要找出一種方法將其轉儲到OutputStream塊(我試圖一次寫入整個字節數組,並且遇到OutOfMemoryException,因爲該文件超過100MB)。任何幫助,將不勝感激...如何在java中將大型二進制文件從服務器傳輸到客戶端

+0

您可以嘗試通過例如轉移它。 FTP。見:http://stackoverflow.com/questions/295178/what-java-ftp-client-library-should-i-use – 2012-04-19 09:44:41

+0

正如我昨天和今天已經回答這個問題一次,我會把它留給別人。 ;) – 2012-04-19 09:47:02

回答

3

做同時閱讀和書寫。

import org.apache.commons.fileupload.util.Streams; 
import org.apache.commons.io.FileUtils; 

     long size = sourceFile.length(); 
     if (size <= Integer.MAX_VALUE) 
      response.setContentLength((int)size); 

     InputStream in = FileUtils.openInputStream(sourceFile); 
     OutputStream out = response.getOutputStream(); 
     Streams.copy(in, out, false); 
+0

我必須使用Http並且不允許使用任何org.apache類 – user1343585 2012-04-19 10:02:44

+0

'Streams.copy'只是讀寫一個循環,關閉輸入,這裏不關閉輸出。 'openInputStream'你可以很容易地替換(做更多的檢查,正常打開)。 – 2012-04-19 10:39:11

相關問題