Ограничение в 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 для меня
Ответы
Ответ 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 и выше.