在Java中,我如何计算下载期间网页的下载大小?
我想这样做:
我有一个donwload的最大限制大小(例如:10MB)。我开始下载网页。如果页面的下载直到达到限制才完成,我将停止下载
我在这里做了一个类似的问题:In Java, it's possible determine the size of a web page before download?,但它是为了在我开始下载之前发现页面的大小,但是一些服务器不发送此信息。现在我需要在加载过程中进行控制
他们告诉我使用CountInputStream。这是路吗?我使用的是HttpUrlConnection,所以下载不是通过getInputStream完成的
# 1 楼答案
如果您使用
HttpUrlConnection
通过HTTP从远程资源读取数据,则这意味着您正在使用HttpUrlConnection.getInputStream()
读取远程资源返回的数据要计算从连接读取的字节数,只需。。。计算从inputStream读取的字节数。例如:
# 2 楼答案
如果web服务器支持它,您可以查看
Content-Length
头,它会告诉您这个东西有多大:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
如果服务器/项目不支持内容长度,那么您必须读取整个内容并只计算字节数
你链接到的答案似乎包含了你所需要的大部分其他信息,这不是和你的问题几乎完全一样吗
# 3 楼答案
如果您确保启用了HTTP 1.1 keep alive(连接:keep alive),并且服务器同意,则服务器有义务发送内容长度
# 4 楼答案
您可以执行HTTP HEAD请求,但这只会返回网页的“内容长度”
网页的大小很有趣,因为网页包含很多其他文档(例如图形)。内容长度并不是文档的“整个大小”,即使此时询问内容长度,也不能保证内容长度在几毫秒后会保持不变
对于静态页面,内容长度可能是可信的;然而,对于动态内容,我认为内容长度有时是错误的,或者总是错误的