如何使用JAX-RS流式传输无限的InputStream

yeg*_*256 7 java jax-rs jersey

我有InputStream一些数据,我想要返回以响应GETHTTP请求.我希望我的web/API客户端能够无休止地阅读它.如何使用JAX-RS进行操作?我正在尝试这个:

@GET
@Path("/stream")
@Produces(MediaType.TEXT_PLAIN)
public StreamingOutput stream() {
    final InputStream input = // get it
    return new StreamingOutput() {
        @Override
        public void write(OutputStream out) throws IOException {
            while (true) {
                out.write(input.read());
                out.flush();
            }
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

但内容不会出现在客户端.但是,如果我添加OutputStream#close(),服务器会在当时发送内容.我怎样才能让它真正流畅?

Mar*_*ski 0

只是一个疯狂的猜测:

@GET
@Path("/stream")
@Produces(MediaType.TEXT_PLAIN)
public Response stream() {
    final InputStream input = getit();
    return Response.ok(input, MediaType.TEXT_PLAIN_TYPE).build();        
}
Run Code Online (Sandbox Code Playgroud)

  • 如上所述,“InputStream”将首先被完全读入内存,然后**传递到客户端。这不是我要找的 (2认同)