有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,我如何计算下载期间网页的下载大小?

我想这样做:

我有一个donwload的最大限制大小(例如:10MB)。我开始下载网页。如果页面的下载直到达到限制才完成,我将停止下载

我在这里做了一个类似的问题:In Java, it's possible determine the size of a web page before download?,但它是为了在我开始下载之前发现页面的大小,但是一些服务器不发送此信息。现在我需要在加载过程中进行控制

他们告诉我使用CountInputStream。这是路吗?我使用的是HttpUrlConnection,所以下载不是通过getInputStream完成的


共 (4) 个答案

  1. # 1 楼答案

    如果您使用HttpUrlConnection通过HTTP从远程资源读取数据,则这意味着您正在使用HttpUrlConnection.getInputStream()读取远程资源返回的数据

    要计算从连接读取的字节数,只需。。。计算从inputStream读取的字节数。例如:

    HttpUrlConnection conn = ...;
    byte[] dataBuffer = new byte[MAX_BYTES];
    InputStream stream = conn.getInputStream();
    int bytesRead, totalRead = 0;
    while (bytesRead != -1) {
        bytesRead = stream.read(dataBuffer, totalRead, bufferLength);
        totalRead += bytesRead;
        if (totalRead > MAX_BYTES) throw new FileTooBigException(...);
    }
    
  2. # 2 楼答案

    如果web服务器支持它,您可以查看Content-Length头,它会告诉您这个东西有多大:

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    如果服务器/项目不支持内容长度,那么您必须读取整个内容并只计算字节数

    你链接到的答案似乎包含了你所需要的大部分其他信息,这不是和你的问题几乎完全一样吗

  3. # 3 楼答案

    如果您确保启用了HTTP 1.1 keep alive(连接:keep alive),并且服务器同意,则服务器有义务发送内容长度

  4. # 4 楼答案

    您可以执行HTTP HEAD请求,但这只会返回网页的“内容长度”

    网页的大小很有趣,因为网页包含很多其他文档(例如图形)。内容长度并不是文档的“整个大小”,即使此时询问内容长度,也不能保证内容长度在几毫秒后会保持不变

    对于静态页面,内容长度可能是可信的;然而,对于动态内容,我认为内容长度有时是错误的,或者总是错误的