servletHttpResponse中通過getOutputStream()獲取的OutputStream不應該用BufferedOutputStream封裝
阿新 • • 發佈:2019-01-06
2018/4/17
做一個媒體資料管理系統的檔案下載功能,考慮到媒體檔案較大,沒有采用EntityResponse類封裝檔案,而是採用直接向OutputStream寫入的方式,結果出現了檔案下載總是在最後快完成的時候失敗的情況,是由於outputStream被BufferedOutputStream封裝,我又不瞭解BufferedOutputStream的flush()方法是否會呼叫底層流的flush方法,所以不敢呼叫他的flush方法,導致最後一點檔案資料在buffer中無法輸出,導致檔案下載失敗。
目前待考察的幾個問題:
1.BufferedOutputStream是否會呼叫底層的OutputStream的flush方法。
會,之前也在不知道某個地方看到說會,然後查了一下原始碼
public synchronized void flush() throws IOException {
flushBuffer();
out.flush();
}
點選開啟連結從這篇文章可以知道,為HttpServletResponse的outpuStream外包裝一個BufferedOutputStream是沒必要的,因為這個outputStream以及是有快取的了。