我正在向正在制作的android应用程序的网站发出HTTP get请求。我正在使用DefaultHttpClient并使用HttpGet发出请求。我得到实体响应,并从中获得一个InputStream对象,以获取页面的html。然后,我循环遍历以下内容:BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));String x = "";x = r.readLine();String total = "";while(x!= null){total += x;x = r.readLine();}但是,这太慢了。这效率低下吗?我没有加载较大的网页-www.cokezone.co.uk,因此文件大小不大。有一个更好的方法吗?
3 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
您的代码中的问题在于,它正在创建许多重的String对象,复制它们的内容并对其执行操作。相反,应该使用StringBuilder以避免String在每个追加上创建新对象,并避免复制char数组。您的案例的实现将如下所示:
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
for (String line; (line = r.readLine()) != null; ) {
total.append(line).append('\n');
}
现在,您total无需将其转换为即可使用String,但是如果您需要将结果作为String,只需添加:
字符串结果= total.toString();
我会尽力解释一下...
a += b(或a = a + b),其中a和b都是字符串,副本的内容都 a 和 b一个新的对象(注意,你还复制a,它包含累积 String),和你正在做的每一次迭代的拷贝。
a.append(b),其中a是StringBuilder,直接将b内容附加到a,因此您不必在每次迭代时都复制累积的字符串。
- 3 回答
- 0 关注
- 602 浏览
添加回答
举报
0/150
提交
取消