gpt4 book ai didi

java - EntityUtils.toString(entity) 抛出 OutOfMemory 错误

转载 作者:可可西里 更新时间:2023-11-01 16:43:06 25 4
gpt4 key购买 nike

我正在使用 org.apache.http.HttpClient 从 URL 获取响应,并使用 EntityUtils.toString() 将 HttpEntity 响应转换为字符串。

但是,当返回的数据很大时,有时会抛出 OutOfMemory 错误。这是有道理的,因为堆空间不能在内存中保存整个响应字符串。

我的问题是如何将来自 HttpClient 的 HttpEntity 响应转换为字符串并减少这些 OutOfMemoryErrors 的可能性(假设我不能增加堆大小)?

我更喜欢与 EntityUtils.toString() 一样高效或接近高效的替代方法。

异常:

java.lang.OutOfMemoryError: Java heap space
at org.apache.http.util.CharArrayBuffer.<init>(CharArrayBuffer.java:59)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:230)
at org.apache.http.util.EntityUtils.toString(EntityUtils.java:273)

这是我的代码:

import org.apache.http.util.EntityUtils;
import org.apache.http.client.*;

url = "http://test.com/test"

HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);

HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity); //alternative???

最佳答案

HttpEntity 有像 getContentLength() 和 getContent() 这样的方法,它是一个输入流。

使用 Streams 将降低堆空间耗尽的可能性。

但是,如果格式不同,您将不得不让您的逻辑处理响应。这是一篇处理输入流的有用帖子:Reading a plain text file in Java

关于java - EntityUtils.toString(entity) 抛出 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22510286/

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