从web服务响应中读取InputStream



我想做的似乎是一件非常简单的事情,从Jersey web服务中获得一个从类RestResponse返回的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

有什么想法,我错过了什么?难道不能直接把流通过管道吗?

某些类型的InputStream在Java中只能读取一次。根据您上面的评论,当您将其管道到System.out时,您似乎正在使用InputStream。尝试将对System.out的调用注释掉,看看是否可以访问InputStream。还要确保流在需要它之前没有在代码中的其他地方被使用。

更新:

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

通常,打开一个流并使其长时间保持打开状态并不是一个好的设计实践,因为这样底层资源将无法被其他需要它的人使用。所以你应该打开这个流,只有当你真正需要它的时候才使用它。

相关内容

  • 没有找到相关文章

最新更新