Java HttpUrlConnection获取内容长度的限制

时间:2010-02-19 08:15:51

标签: java download httpurlconnection

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

如果我只下载文件大小小于2GB的文件,那就太棒了。做一些挖掘并发现java不支持unsigned int值,但即便这样只会给我一个4GB的文件大小。

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

提前致谢。

更新

感谢您回答Elite Gentleman,我尝试了您的建议,但仍保持返回空值,所以我所做的是

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

由于某些原因,只使用conn.getRequestProperty总是为我返回一个null

1 个答案:

答案 0 :(得分:18)

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

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

它等同于connection.getContentLength,除了返回值是string类型。这可以给出精确的位长结果。

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


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

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