java – Android从输入流有效地读取

我正在做一个HTTP获取请求到一个网站的Android应用程序我正在做。

我使用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所以文件大小不大。有没有更好的方法来做到这一点?

谢谢

安迪

最佳答案
你的代码中的问题是,它创建了大量的重型String对象,复制其内容并对其执行操作。相反,你应该使用StringBuilder来避免在每个append上创建新的String对象,避免复制char数组。你的情况的实现将是这样:

BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
    total.append(line).append('\n');
}

现在可以使用total而不将其转换为String,但如果您需要结果作为String,只需添加:

String result = total.toString();

我会尽力解释它更好…

> a = b(或a = ab),其中a和b是字符串,将a和b的内容复制到一个新对象(注意,你也要复制一个包含累积的字符串),你在做在每次迭代的那些副本。
> a.append(b),其中a是StringBuilder,直接将b内容附加到a,因此在每次迭代时不会复制累积的字符串。

转载注明原文:java – Android从输入流有效地读取 - 代码日志