10

就这样,我开始了创建一个运行良好的 Java 下载管理器的项目。我目前看到的唯一问题是当我请求 URL 的内容长度时。当我使用 HttpUrlConnection 的 getContentLength 提供的方法时,它返回一个 Int。

如果我只下载文件大小小于 2GB 的文件,那就太好了。进行更多挖掘并发现 java 不支持 unsigned int 值,但即使这样也只会给我最大 4GB 的文件大小。

任何人都可以在正确的方向上帮助我获取大于 2GB 的文件的内容大小。

提前致谢。

更新

感谢您回答精英绅士,我尝试了您的建议,但一直返回空值,所以我所做的是

HttpURLConnection conn = (HttpURLConnection) absoluteUrl.openConnection();
conn.connect();
long contentLength = Long.parseLong(conn.getHeaderField("Content-Length"));

出于某种原因,仅使用 conn.getRequestProperty 总是为我返回 null

4

1 回答 1

17

为什么不尝试使用 headerField 方法获取内容长度?IE

HttpURLConnection connection = new HttpURLConnection(...); 
long contentLength = Long.parseLong(connection.getHeaderField("Content-Length"));

connection.getContentLength除了返回值是字符串类型外,它等价于。这可以给出准确的位长结果。

更新:我将其更新为使用 HeaderField 而不是 requestProperty ...感谢问题的作者。


感谢来自 Ru 的 @FlasH,您可以使用 JDK 7 及更高版本获得相同的结果。

这实际上调用了新URLConnection.getHeaderFieldLong()方法,该方法也已在 JDK 7 及更高版本中引入。

于 2010-02-19T08:26:14.223 回答