我正在使用泽西StreamingOutput
一直工作得很好,直到我们升级到泽西岛2.16。这就是事情。在某些情况下,我的StreamingOuput
产生的输出非常缓慢。我经常写数据,但我写的很慢,一次只是一点点。每次写入任何字节时,我都会在flush()
上调用OutputStream
传递给StreamingOutput.write()
,但flush()似乎没有效果。在将{8}写入OutputStream
之前,没有任何内容通过线路发送。不幸的是,在某些情况下,当写入8K时,客户端已超时。
我下载了一些针对泽西源的内容,通过一些调试,我发现传递给OutputStream
的{{1}}是一个write()
,其中包含UnCloseableOutputStream
。
CommittingOutputStream
启用了缓冲,因此在提交响应(完成)之前,flush()基本上是无操作。
所以,我在泡菜中。如何使用CommittingOutputStream
(或直接写入输出流)并强制它在整个响应完成之前通过线路发送字节?还有其他方法可以用泽西这样做吗?我无法在StreamingOutput
上找到任何方法来执行此操作。我无法找到任何关闭缓冲的方法。
答案 0 :(得分:3)
Jersey属性ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER
用于设置缓冲区的大小,但更改它会影响Content-Length
标题(如果这对您很重要)。您应该阅读该物业的文档。
一个整数值,它定义用于缓冲服务器端响应实体的缓冲区大小,以确定其大小并设置HTTP“Content-Length”标头的值。
如果实体大小超过配置的缓冲区大小,则将取消缓冲并且不确定实体大小。值小于或等于零会禁用实体的缓冲。
可以在服务器端使用此属性来覆盖出站消息缓冲区大小值 - 默认值或使用“jersey.config.contentLength.buffer”全局属性设置的全局自定义值。
默认值为8192.