コンテンツの長さを取得する Java HttpUrlConnection の制限
-
21-09-2019 - |
質問
まさに、Java ダウンロード マネージャーを作成するプロジェクトを開始し、順調に進んでいます。現時点で発生している唯一の問題は、URL のコンテンツの長さをリクエストするときです。HttpUrlConnection の getContentLength によって提供されるメソッドを使用すると、Int が返されます。
これは、ファイル サイズが 2 GB 未満のファイルのみをダウンロードする場合に最適です。さらに詳しく調べてみると、Java は unsigned int 値をサポートしていないことがわかりましたが、それでもファイル サイズは最大 4 GB しか得られません。
2GBを超えるファイルのコンテンツサイズを取得する正しい方向に誰かが私を助けてくれますか。
前もって感謝します。
アップデート
答えてくれてありがとう、エリート紳士、私はあなたが提案したことを試しましたが、null値を返し続けたので、代わりに私がしたのは
HttpURLConnection conn = (HttpURLConnection) absoluteUrl.openConnection();
conn.connect();
long contentLength = Long.parseLong(conn.getHeaderField("Content-Length"));
何らかの理由で、conn.getRequestPropertyを使用するだけで常にnullが返されました。
解決
コンテンツの長さを取得するために 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 以降でも導入されています。