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以及是有缓存的了。

你可能感兴趣的:(servletHttpResponse中通过getOutputStream()获取的OutputStream不应该用BufferedOutputStream封装)