关闭 JAX-RS StreamingOutput 的 OutputStream

Closing JAX-RS StreamingOutput's OutputStream

StreamingOutputOutputStream 是否应该由实施 class 关闭?

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

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

由于无法找到明确的答案,我查看了球衣的来源作为参考实现。在泽西岛,StreamingOutputMessageBodyWriter 处理,只需调用 streamingOutput.write(os) [1],其中 os 是传递给 MessageBodyWriterOutputStream。这很好,因为它的 javadoc 非常清楚这个 OutputStream 不能 被关闭。

总结一下:传递给StreamingOutputOutputStream不能关闭。

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