2
我使用org.apache.http.HttpClient从URL获取响应,并使用EntityUtils.toString()将HttpEntity响应转换为字符串。EntityUtils.toString(实体)抛出OutOfMemory错误
但是,当返回的数据很大时,有时会引发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???
不要转换为'字符串'将是逻辑结论imho。你需要怎样处理结果? –
@ M.Deinum不幸的是,这是一个将字符串返回给客户端的API。所以我不能改变返回格式。 –
你打算用'String'做什么?大概是打印到某个地方(控制台?文件?记录器?)。在所有这些情况下,您可以流式传输内容,而不是将整个内容读入内存。 –