关闭JAX-RS StreamingOutput的OutputStream

Sve*_*rev 13 java cxf jax-rs jersey java-ee

StreamingOutputOutputStream由实现类被关闭?

java-doc没有给出任何建议.我想它只是代表底层ServletOutputStream,这意味着它不应该被关闭,但我的猜测可能是错误的:)此外,javadoc引用了一个MessageBodyWriter接口,它明确表示输出流不能被关闭.

https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/StreamingOutput.html

Sve*_*rev 14

由于无法找到确定的答案,我看了一下球衣的来源是参考实现.在Jersey的StreamingOutput由处理MessageBodyWriter通过简单地调用streamingOutput.write(os)[1],其中osOutputStream传递到MessageBodyWriter.这很好,因为它的javadoc非常明确,OutputStream 不能关闭它.

总结一下:OutputStream传递到的StreamingOutput一定不能关闭.

[1] https://github.com/jersey/jersey/blob/master/core-common/src/main/java/org/glassfish/jersey/message/internal/StreamingOutputProvider.java