1. 程式人生 > >servletHttpResponse中通過getOutputStream()獲取的OutputStream不應該用BufferedOutputStream封裝

servletHttpResponse中通過getOutputStream()獲取的OutputStream不應該用BufferedOutputStream封裝

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以及是有快取的了。