4

我在我的应用程序中使用 Apache HttpClient 4.2.3。我们存储 HTTP 调用的响应,如下所示:

HttpResponse httpResponse = (DefaultHttpClient)httpClient.execute(httpRequest);

响应正文是 4.x API 中的 InputStream:

InputStream responseStream = httpResponse.getEntity().getContent();

我的问题是我需要在应用程序的各个点将响应正文作为字符串和字节 [] 读取。但是 Apache 使用的 InputStream 是一个 EofSensorInputStream,这意味着一旦我到达流 EOF,它就会关闭。无论如何我可以多次获取字符串和字节[]表示而不关闭流?

我已经尝试将字节数组包装在新的 ByteArrayInputStream 中并将其设置为请求正文,但它不起作用,因为我的响应正文可以达到几场演出。我也试过这个,但我注意到原始响应流仍然关闭。

欢迎任何指点。

编辑:在相关说明中,如果我可以在不消耗流或通过反转消耗的情况下找到 InputStream 的长度,那也很棒。

4

1 回答 1

3

1. 我认为您的要求有些矛盾:

一个)

它不起作用,因为我的响应主体可以达到几场演出

b)

无论如何我可以多次获取字符串和字节[]表示而不关闭流

如果您没有足够的内存,这是不可能的。

顺便说一句,以字节形式获取响应的另一种方法是EntityUtils.byte[] toByteArray(final HttpEntity entity).

你真的需要 N-gigs String 吗?你打算用它做什么?

2.

如果我能找到 InputStream 的长度也很棒

httpResponse.getEntity().getContentLength()

3. 由于响应不适合内存,我建议将其保存到文件(或临时文件)中。然后在该文件上设置 InputStream,然后根据需要多次读取。

于 2013-04-25T13:28:43.673 回答