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 メソッドが同時に実行される可能性がある場合に特に重要です。文字列やバイト配列などのエンティティを処理するための便利なメソッドがありますが、それらの使用はお勧めできません。注意して使用しないと、メモリ内の完全なエンティティのバッファリングを意味するため、メモリ不足の状態に簡単につながる可能性があります。
だから私の質問は、文字列として完全な応答が必要な場合 (つまり、DB に格納するため、または DOM を使用して解析するため)、ストリームを使用する方がメモリ効率が高いのはなぜですか?