我想要做的似乎是一件非常简单的事情,从一个来自一个RestResponse类返回的Jersey webservice获取一个InputStream。但我没有得到我的客户端的流:
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
任何想法,我错过了什么?是不是只能管道流?
答案 0 :(得分:1)
某些类型的bar.json
只能在Java中读取一次。根据您上面的评论,当您将InputStream
传输到InputStream
时,您似乎正在使用System.out
。尝试将通话发送至System.out
,看看您是否可以访问InputStream
。还要确保在您需要的地方之前,代码中的任何其他位置都没有使用该流。
<强>更新强>
您的实际问题似乎是在您有机会使用它之前关闭InputStream
。因此解决方案是在您需要之前保持流打开,然后关闭它。
通常情况下,打开流并使其长时间保持打开并不是一个好的设计实践,因为那时底层资源不会被其他需要它的人使用。因此,您应该打开流,并在实际需要时使用它。