我通过调用 response.getOutputStream() 将二进制数据(作为 Clob 从数据库中提取的 CSV 文件)流式传输到浏览器,并且在复制数据时通常会将 OutputStream 包装在 BufferedOutputStream 中。
我应该关闭 BufferedOutputStream 还是这也会关闭底层的 OutputStream?
[额外问题:在这种情况下我需要使用 BufferedOutputStream 还是响应已经缓冲?]
最佳答案
是的,它关闭了它。至于您是否应该关闭它——您是否希望向响应流写入任何其他内容?如果没有,我认为关闭它就可以了。如果你不关闭它,你显然应该冲洗它 - 但我怀疑你可以自己解决这个问题:)
该行为实际上继承自FilterOutputStream
。 FilterOutputStream.close
状态的 Javadocs:
The close method of
FilterOutputStream
calls its flush method, and then calls the close method of its underlying output stream.
至于你是否应该缓冲它——我不确定这是否定义明确。它可能被埋在 servlet 规范的某个地方——它甚至可能是可配置的(有时你真的不想缓冲,但如果你可以缓冲整个响应,这意味着如果在你之后出现问题,你可以提供一个更好的错误页面已经开始写作了)。
关于java - 关闭 BufferedOutputStream 是否也会关闭底层的 OutputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428118/