我正在开发一个JAX-RS客户端应用程序(使用resteasy-client 3.0.8Final),它应该读取由REST服务流式传输的(文本)输出,并在控制台上逐行打印。
对服务的手动curl调用确认输出按预期正确地逐行流式传输。但是,当我尝试从java客户端读取它时,看起来我只能在流关闭并且对服务的调用完成后才从输入流中读取(并因此显示)。换句话说,如果服务每隔一秒左右发出一行输出,而不是每秒显示一行,我必须等到对服务的调用完成,然后立即显示所有行。这是处理响应的代码:
final InputStream is = (InputStream)response.readEntity(InputStream.class);
final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new BufferedInputStream(is)));
try
{
String line;
while ((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
System.out.flush();
}
}
catch (Exception e)
{
throw new IllegalStateException(e);
}
我希望调用readLine
来阻止并等待新行变为可用,但它似乎在等待InputStream被关闭(在另一个线程中?),但是我的理解显然是有缺陷的。
有人看到我错过了什么吗?