2010-02-19 161 views
10

就这样,我开始创建了一个创建Java下载管理器的项目,该项目进展顺利。我现在看到的唯一问题是当我请求URL的内容长度时。当我使用HttpUrlConnection的getContentLength提供的方法时,它返回一个Int。Java中的限制HttpUrlConnection获取内容长度

这是伟大的,如果我只是永远下载文件大小小于2GB的文件。做更多挖掘并发现java不支持unsigned int值,但即使这样也只会给我一个最大4GB的文件大小。

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

在此先感谢。对于

UPDATE

谢谢你回答精英绅士,我想你的建议,但认为保持返回空值,所以不是我所做的就是

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

对于刚刚使用康恩某种原因.getRequestProperty总是为我返回一个空值

+0

我正在寻找'getHeaderField(...)',但我找不到它。这实际上是最好的方式......我已经更新了我的答案。 哦,是的,在执行POST/GET请求之前使用'getRequestProperty',即它是为了请求而不是响应。 – 2010-02-19 09:59:17

回答

17

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

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

它等价于connection.getContentLength,只是返回值是字符串类型。这可以给出比特长度的准确结果。

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


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

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

+0

嗯好点,让我给你一个旋转 – 2010-02-19 08:31:35

+1

顺便说一句,有一个'connection.getContentLengthLong'现在可用(自Java 7以来),它与建议的一样,但用较少的单词。 – 2015-11-23 15:01:03

+0

看来这个解决方案也会触发下载。我们怎么才能得到标题,但不开始实际下载以节省带宽? – lucky1928 2016-02-16 17:52:12