我在建立http连接时有点困惑。我想知道来自服务器的数据在代码的哪个位置完成了在手机、客户端上的下载?
我有以下代码,标准的http java连接代码:
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
所以问题是实际发生了什么:
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
是所有服务器数据都下载在这个地方,还是可能发生来自服务器的数据仍然到达 while 块
while ((s = buffer.readLine()) != null) {
response += s;
}
我的理解是,这种联系仍然存在于:
while ((s = buffer.readLine()) != null) {
response += s;
}
读取套接字时可以提供更多数据。我知道这一点,因为我一直在使用流来处理出价数据,例如电影、绘制大路线或应该显示的内容。
一旦调用.execute()
请求,即在以下之后执行请求:
HttpResponse execute = client.execute(httpGet);
在此点之后,响应将位于内存中。是的,连接仍处于活动状态,但在连接管理器关闭连接之前不会执行任何请求。
在您的 while 循环中,您只是将响应转换为没有连接相关操作的字符串。