2010-02-19 110 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