我试图在Android应用中测量下载时间平均值,并遇到了一个有趣的难题。目前,在执行我的HTTP请求的方法中,我首先
statusCode
以及之后,在检查urlConnection.getInputStream()
后,使用getResponseCode()
读取要提交的相关信息。
为了测量下载时间,我将代码包裹在getInputStream()
行周围,认为为了获得响应代码,操作系统必须已经下载了完整的响应(标题和消息正文)并缓存了它。我相信InputStream
会将getResponseCode()
返回到应用可能继续阅读的响应的本地缓存。
然而,在与同事讨论时,提出了另一种观点,认为一旦Java / Android获取了响应代码和标题,他们就不会查询文件的其余部分,直到我明确地从InputStream开始读取(所以我从InputStream中获取的数据是从服务器实时发送的。)
这些观点中哪些(如果有的话)反映了实际的实施?
Relevant Android Source, if necessary
编辑:以下是Android SDK中public int getResponseCode() throws IOException {
// Call getInputStream() first since getHeaderField() doesn't return
// exceptions
getInputStream();
String response = getHeaderField(0);
if (response == null) {
return -1;
}
response = response.trim();
int mark = response.indexOf(" ") + 1;
if (mark == 0) {
return -1;
}
int last = mark + 3;
if (last > response.length()) {
last = response.length();
}
responseCode = Integer.parseInt(response.substring(mark, last));
if (last + 1 <= response.length()) {
responseMessage = response.substring(last + 1);
}
return responseCode;
}
的代码
$id