为了账号安全,请及时绑定邮箱和手机立即绑定

Android从输入流中高效读取

Android从输入流中高效读取

互换的青春 2019-12-12 13:41:48
我正在向正在制作的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,因此您不必在每次迭代时都复制累积的字符串。


查看完整回答
反对 回复 2019-12-12
  • 3 回答
  • 0 关注
  • 554 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信