2012-08-16 22 views
3

我們試圖按照服務器端的方式,怎樣寫文件內容更快的使用ServletOutputStream的

它需要編寫的MS-亞馬遜服務器的Java客戶端代碼2.5 MB的文件內容,Android客戶端代碼和大約55秒] IOS客戶端代碼

服務器的代碼示例1

servletOutputStream = response.getOutputStream(); 
servletOutputStream.write(fileData); 
servletOutputStream.flush(); 
servletOutputStream.close(); 

服務器的示例代碼2

BufferedOutputStream bufferedOutputStream = new     BufferedOutputStream(servletOutputStream); 
bufferedOutputStream.write(fileData); 
bufferedOutputStream.flush(); 
bufferedOutputStream.close();` 

客戶端閱讀器代碼

inputStream = httpConnection.getInputStream(); 
.... 
int nRead; 
byte[] data = new byte[1024]; 
while ((nRead = inputStream.read(data, 0, data.length)) != -1) { 
    buffer.write(data, 0, nRead); 
} 
buffer.flush(); 
buffer.close(); 

請分享您的想法,以提高下載速度提前

回答

2

添加BufferedOutputStream不會做出任何區別

感謝。默認情況下,servlet輸出流實際上是ByteArrayOutputStream,因爲servlet容器在寫入任何頭之前必須看到整個響應,因此它可以寫入Content-Length頭。這增加了延遲,但不是5秒。通過使用固定長度或分塊響應編碼,您可以解決它所增加的任何延遲。有關詳細信息,請參閱Servlet API。不過,我認爲你需要首先解決一個更大的問題,可能是網絡或DNS或時鐘偏移問題。