请考虑以下代码。
try {
httpURLConnection = (HttpURLConnection) new URL(strings[0]).openConnection();
httpURLConnection.setConnectTimeout(Config.HTTP_CONNECTION_TIMEOUT);
httpURLConnection.setReadTimeout(Config.HTTP_CONNECTION_TIMEOUT);
httpURLConnection.connect();
responseCode = httpURLConnection.getResponseCode();
httpURLConnection.getHeaderFields();
}
finally {
httpURLConnection.disconnect();
}
问题是即使我没有使用InputStream
来阅读回复,在我的互联网/ Wifi连接日志中,我可以看到响应体。我想要的只是检查标题中的字段并根据该字段继续阅读InputStream
。
我的问题是这些:
BufferedInputStream
之前自动下载全部/部分文件的行为是否正确?InputStream
来阅读回复?答案 0 :(得分:1)
响应包括标题和正文,服务器不会停止让客户端在发送正文之前确认标题。
当客户端能够从头部读取响应代码时,身体的一部分已经被发送,其大小取决于网络延迟,缓冲,....
HttpURLConnection.getResponseCode()
的当前实现甚至使用getInputStream()
来确保连接处于正确状态。
客户端可以选择忽略正文,但通常不推荐使用,因为它可能会阻止持久连接被重用。
我不确定Android,但自Java 6以来,后台线程会自动用于读取剩余数据。
如果If-Modified-Since
不是选项,为什么不使用HEAD
request? :
HTTP HEAD方法请求返回的标头 将使用HTTP GET方法请求指定的资源。这样的 请求可以在决定下载大型资源之前完成 例如,节省带宽。