实现StreamingOutput
接口的类是否应该关闭OutputStream
?
Java文档没有给出任何建议。我猜测它只是委托给底层的ServletOutputStream
,这意味着它不应该被关闭,但我的猜测可能是错误的 :) 另外,Java文档提到了MessageBodyWriter
接口,在那里明确指出输出流不能关闭。
https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/StreamingOutput.html
实现StreamingOutput
接口的类是否应该关闭OutputStream
?
Java文档没有给出任何建议。我猜测它只是委托给底层的ServletOutputStream
,这意味着它不应该被关闭,但我的猜测可能是错误的 :) 另外,Java文档提到了MessageBodyWriter
接口,在那里明确指出输出流不能关闭。
https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/StreamingOutput.html
由于找不到确切的答案,我查看了jersey的源代码作为参考实现。在Jersey中,StreamingOutput
通过调用streamingOutput.write(os)
[1]被一个MessageBodyWriter
处理,其中os
是传递给MessageBodyWriter
的OutputStream
。这很好,因为它的javadoc非常清楚,这个OutputStream
不能被关闭。
总结一下:传递给StreamingOutput
的OutputStream
不能被关闭。
interface StreamingOutput
的Javadocs中缺少这份文档! - kevinarpe