Android高效地从输入流读取数据

161

我正在制作一个针对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,所以文件大小并不大。有更好的方法来解决这个问题吗?

谢谢,

Andy


除非您实际上正在解析这些行,否则逐行阅读并没有太多意义。我宁愿通过固定大小的缓冲区逐个字符地读取:https://gist.github.com/fkirc/a231c817d582e114e791b77bb33e30e9 - Mike76
12个回答

1
如果文件很长,您可以通过将内容附加到 StringBuilder 中而不是对每行使用字符串连接来优化代码。

说实话,这并不是很长——它是网站www.cokezone.co.uk的页面源代码——所以真的不是很大。绝对少于100kb。 - RenegadeAndy
有没有人对如何使这个更有效率有其他的想法?或者这是否真的是低效的?如果后者是正确的,为什么会花费这么长时间呢?我不认为连接有问题。 - RenegadeAndy

-2

我习惯于读取完整的数据:

// inputStream is one instance InputStream
byte[] data = new byte[inputStream.available()];
inputStream.read(data);
String dataString = new String(data);

请注意,此适用于存储在磁盘上的文件,而不适用于没有默认大小的流。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接