java - 在Java中,可以在下载前确定网页的大小吗?

标签 java download size

我想确定网页的大小,如果它大于一个数字(例如:5MB),我将下载或不下载。 我可以知道这些信息吗?

最佳答案

您可以使用以下方法进行适当的近似:

HttpURLConnection content = (HttpURLConnection) new URL("www.example.com").openConnection();
System.out.println(content.getContentLength());

但是,这只会告诉您所请求的特定资源的长度(例如 URL 底部的 HTML)。 您还需要浏览页面中的 HTML,查看它引用的所有资源(来自其他站点的脚本、图像、视频等)并将它们全部加起来。

这将使您非常接近总大小,但即使那样您也不会得到完美的计数,因为 (a) 并非所有 URL 都会返回此信息,而您对此无权控制, (b) 根据内容的加载方式(例如通过隐藏细节的 AJAX 调用),您将无法提前知道要下载的资源的完整列表。

或者,如果 URL 没有返回结果,我认为 Giacomo 建议使用 CounterInputStream。不错的主意。您可以将上述建议与 CounterInputStream 结合起来,以记录已发送的总数,并可能在达到指定的最大总传输大小时停止传输。这样你基本上就有了一个预测的大小(比如一个网站告诉你它将是 3.3 MB),但是当你下载时你发现它实际上是 6 MB 并且还没有停止,并做出决定不再下载。

关于java - 在Java中,可以在下载前确定网页的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902306/

相关文章:

java - 在 selenium webdriver (Java) 中查找嵌套元素

cocoa - 在 cocoa 中下载带有进度条的文件?

jQuery 文档准备就绪事件

android - 下载前如何知道文件的大小?

Java 2d 坐标变换

java - 将 JsonArray 转换为 ArrayList

windows-phone-7 - 如何处理 emailcomposetask 中的 "The size of input should not exceed 64K"异常?

html - CSS - 任何大小图像的相对大小(比例)

c - 不同 int 类型的运算

java - 调整 byte[] 二进制补码表示的整数的大小