gpt4 book ai didi

java - 从Web服务响应中读取InputStream

转载 作者:行者123 更新时间:2023-11-30 07:58:18 26 4
gpt4 key购买 nike

我想做的似乎是一件非常简单的事情,从 Jersey Web 服务获取一个从 RestResponse 类返回的输入流。但我没有将流发送给我的客户端:

public class RestResponse {
private InputStream responseStream;

public RestResponse(InputStream responseBodyStream) throws IOException{
this.responseStream = responseBodyStream;
//here I can get the stream contents from this.responseStream
}

public InputStream getResponseStream() throws IOException {
//here stream content is empty, if called from outside
//only contains content, if called from constructor
return this.responseStream;
}
}

public class HttpURLConnectionClient{

public RestResponse call(){
try{
....

InputStream in = httpURLConnection.getInputStream();
RestResponse rr = new RestResponse(in);
}finally{
in.close(); <- this should be the suspect
}
}
}


RestResponse rr = httpURLConnectionClient.call()//call to some url
rr.getResponseStream(); //-> stream content is empty

有什么想法吗?我缺少什么?是否不可能仅通过管道传输流?

最佳答案

某些类型的InputStream在Java中只能读取一次。根据您上面的评论,当您通过管道将其传输到 System.out 时,您似乎正在使用 InputStream。尝试注释掉对 System.out 的调用,看看是否可以访问您的 InputStream。还要确保在您需要它的位置之前,代码中的其他任何地方都不会消耗该流。

更新:

看来您的实际问题是由于在有机会使用InputStream之前关闭它而引起的。因此,解决方案是保持流打开,直到需要它为止,然后将其关闭。

通常,打开流并长时间保持打开状态并不是一个好的设计实践,因为这样底层资源将无法供任何其他需要它的人使用。因此,您应该打开流,并仅在实际需要时使用它。

关于java - 从Web服务响应中读取InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com