是的,我开始创建一个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
答案 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及更高版本中引入。