我们使用 HTTPClient 来实现 REST API。
我们正在使用以下方式读取服务器响应:
method = new PostMethod(url);
HttpClient client = new HttpClient();
int statusCode = client.executeMethod(method);
String responseBody = method.getResponseBodyAsString();
当我们这样做时,我们会收到以下警告:
Dec 9, 2009 7:41:11 PM org.apache.commons.httpclient.HttpMethodBase getResponseBody
WARNING: Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
文档继续说:
HttpClient 能够高效地请求/响应正文流。可以提交或接收大型实体而无需在内存中缓冲。如果可以同时执行多个 HTTP 方法,这一点尤其重要。虽然有一些方便的方法可以处理字符串或字节数组等实体,但不鼓励使用它们。除非小心使用,否则它们很容易导致内存不足,因为它们意味着在内存中缓冲完整的实体。
所以我的问题是,如果您确实需要将完整的响应作为字符串(即:存储在数据库中,或使用 DOM 解析),为什么使用流的内存效率更高?