Android从输入流中高效读取

我正在向正在制作的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,因此文件大小不大。有一个更好的方法吗?


互换的青春
浏览 556回答 3
3回答

蓝山帝景

您的代码中的问题在于,它正在创建许多重的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,因此您不必在每次迭代时都复制累积的字符串。
打开App,查看更多内容
随时随地看视频慕课网APP