Подтвердить что ты не робот

Ограничение в Java HttpUrlConnection получение длины содержимого

Итак, я начал свой проект по созданию менеджера загрузки Java, который идет хорошо. Единственная проблема, которую я вижу на данный момент, - это когда я запрашиваю длину содержимого URL-адреса. Когда я использую метод, предоставляемый HttpUrlConnection getContentLength, он возвращает Int.

Это здорово, если я только когда-либо загружал файлы размером менее 2 ГБ в размер файла. Проделав еще несколько операций по поиску и обнаружив, что java не поддерживает значения unsigned int, но даже для того, чтобы дать мне размер файла 4 ГБ макс.

Может ли кто-нибудь помочь мне в правильном направлении получить размер содержимого файла, превышающего 2 ГБ.

Спасибо заранее.

UPDATE

Спасибо, что ответите Elite Gentleman, я попробовал то, что вы предложили, но это продолжало возвращать нулевое значение, поэтому вместо этого я сделал

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

По какой-то причине просто использование conn.getRequestProperty всегда возвращало null для меня

4b9b3361

Ответ 1

Почему бы не попробовать использовать метод headerField для получения длины содержимого? т.е.

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

Он эквивалентен как connection.getContentLength, за исключением того, что возвращаемое значение имеет строку типа. Это может дать точный результат длины бит.

UPDATE: Я обновил его, чтобы использовать HeaderField вместо requestProperty... благодаря автору вопроса.


Благодаря @FlasH от Ru вы можете добиться того же результата, используя JDK 7 и выше.

Это, по сути, вызывает новый метод URLConnection.getHeaderFieldLong(), который также был введен в JDK 7 и выше.