我想知道这两种从 http 调用获取响应的方式的一般区别在哪里。
以下是 Android 示例,但在 Java 中完全一样。
org.apache.http
仅使用库的第一个示例:
String s = "";
try {
HttpPost httppost = new HttpPost(url);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
s = EntityUtils.toString(entity, HTTP.UTF_8);
// do something with s
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用 BufferedReader 获取响应的第二个示例:
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(
instream));
try {
String line;
StringBuilder sb = new StringBuilder();
while((line = bufferedreader.readLine()) != null)
sb.append(line);
// do something with the stringbuilder
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
在哪种情况下,我应该更喜欢使用 Stream 和 Reader 的第二个示例而不是第一个示例,反之亦然?为什么我问这个问题有一些主要的想法。如果没有包括重要的一点,请告诉我:
- Reader 方法需要更多的空间和时间。
- 响应数据的大小对第一个或第二个示例没有影响。
- 第二个示例中的代码更复杂(开销更大)。
- Reader 方法更加灵活,因为图书馆中有大量不同的 Reader。
这一点使我赞成第一个例子。