Car*_*Orr 12 java servlets java-ee
我通过调用response.getOutputStream()将二进制数据(从数据库中提取的CSV文件作为Clob)传输到浏览器,并且通常在复制数据时将OutputStream包装在BufferedOutputStream中.
我应该关闭BufferedOutputStream还是关闭底层的OutputStream?
[额外问题:在这种情况下我是否需要使用BufferedOutputStream或响应是否已经缓冲?]
Jon*_*eet 12
是的,关闭它.至于你是否应该关闭它 - 你是否希望在响应流中写入其他内容?如果没有,我认为关闭它是好的.如果你不关闭它,你应该显然应该冲洗它 - 但我怀疑你可以为自己找出这一点:)
该行为实际上是继承自的FilterOutputStream.国家的Javadocs FilterOutputStream.close:
close方法
FilterOutputStream调用其flush方法,然后调用其底层输出流的close方法.
至于你是否应该缓冲它 - 我不确定这是否定义明确.它可能隐藏在某个地方的servlet规范中 - 它甚至可以配置(有时你真的不想缓冲,但如果你可以缓冲整个响应,这意味着你可以提供一个更好的错误页面,如果你出错后出错)我开始写作).
关闭 BufferedOutputStream 也将关闭底层的 OutputStream。您应该关闭 BufferedOutputStream 以便它在关闭底层流之前刷新其内容。请参阅 FilterOutputStream.close() 的实现(从 BufferedOutputStream 扩展)以说服自己。
我猜想给你的 servlet 的响应流是否被缓冲取决于你的 Servlet 容器的实现。FWIW 我知道默认情况下 Tomcat 会缓冲其 servlet 响应流,以便尝试设置内容长度的 HTTP 标头。
| 归档时间: |
|
| 查看次数: |
7114 次 |
| 最近记录: |