10

そうです、順調に進んでいる Java ダウンロード マネージャーを作成するプロジェクトを開始しました。現時点で唯一の問題は、URL のコンテンツの長さを要求するときです。HttpUrlConnection の getContentLength で提供されるメソッドを使用すると、Int が返されます。

これは、ファイル サイズが 2 GB 未満のファイルのみをダウンロードする場合に最適です。さらに掘り下げて、Javaがunsigned int値をサポートしていないことを発見しましたが、それでも最大4GBのファイルサイズしか得られません。

2GBを超えるファイルのコンテンツサイズを取得する正しい方向に誰でも助けてくれますか?

前もって感謝します。

アップデート

エリートジェントルマンに答えてくれてありがとう、私はあなたが提案したことを試しましたが、それはnull値を返し続けたので、代わりに私がしたことは

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

何らかの理由で conn.getRequestProperty を使用すると常に null が返されました

4

1 に答える 1

17

コンテンツの長さを取得するために headerField メソッドを使用してみませんか? すなわち

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

connection.getContentLength戻り値が文字列型であることを除いて、同等です。これにより、ビット長の正確な結果が得られます。

更新: requestProperty の代わりに HeaderField を使用するように更新しました...質問の作成者に感謝します。


Ru の @FlasH のおかげで、JDK 7 以降を使用して同じ結果を得ることができます。

URLConnection.getHeaderFieldLong()これは、事実上、JDK 7 以降でも導入された新しいメソッドを呼び出します。

于 2010-02-19T08:26:14.223 に答える