我在我的应用程序中使用Apache HttpClient 4.2.3。我们存储HTTP调用的响应,如下所示:
HttpResponse httpResponse = (DefaultHttpClient)httpClient.execute(httpRequest);
响应正文是4.x API中的InputStream:
InputStream responseStream = httpResponse.getEntity().getContent();
我的问题是我需要在应用程序的各个点读取响应体作为字符串和byte []。但是Apache使用的InputStream是一个EofSensorInputStream,这意味着一旦我到达流EOF,它就会被关闭。无论如何,我可以多次获取字符串和byte []表示而不关闭流吗?
我已经尝试wrapping the byte array in a new ByteArrayInputStream并将其设置为请求正文,但由于我的回复正文可以达到一些演出,因此无效。我也尝试了this,但我注意到原来的响应流仍然关闭了。
欢迎任何指示。
编辑:在相关的说明中,如果我能够在不消耗流量或通过逆转消耗的情况下找到InputStream的长度,那也是很好的。
答案 0 :(得分:2)
1。我认为你的要求有些矛盾:
A)
它不起作用,因为我的回复机构可以达到一些演出
b)中
无论如何,我可以多次获取字符串和byte []表示而不关闭流
如果你没有足够的内存,这是不可能的。
顺便说一下,另一种以字节为单位获取响应的方法是EntityUtils.byte[] toByteArray(final HttpEntity entity)
。
你真的需要N-Gigs String吗?你打算用它做什么?
2。
如果我能找到InputStream的长度,那也很棒
httpResponse.getEntity().getContentLength()
3。由于响应不适合内存,我建议将其保存到文件(或临时文件)中。然后在该文件上设置InputStream,然后根据需要多次读取它。