gpt4 book ai didi

java - 在 Apache HttpClient 4.x 中多次读取响应主体

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:34 24 4
gpt4 key购买 nike

我在我的应用程序中使用 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,它就会关闭。无论如何我可以多次获取字符串和字节 [] 表示而不关闭流?

我已经试过了 wrapping the byte array in a new ByteArrayInputStream并将其设置为请求主体,但它不起作用,因为我的响应主体可以达到几场演出。我也试过 this ,但我注意到原始响应流仍然关闭。

欢迎任何指点。

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

最佳答案

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

一)

it doesn't work since my response body can reach a few gigs

二)

Is there anyway I can get the string and byte[] representations multiple times and not close the stream

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

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

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

2。

it would be also be great if I could find the length of the InputStream

httpResponse.getEntity().getContentLength()

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

关于java - 在 Apache HttpClient 4.x 中多次读取响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16213874/

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