2016-03-13 2 views
2

Я загружаю файл * .rar с моего веб-сервера с помощью HttpURLConnection. Я добавил некоторые временных строк кода, чтобы приблизительно измерить (это было довольно неточно) скорость загрузки при запуске загрузки через Java/HttpURLConnection. Скорость загрузки колебалась где-то между 400kb/s и 2mb/s, приблизительно.Как увеличить скорость загрузки при загрузке через HttpURLConnection?

Загрузка этого же файла через мой браузер (Mozilla FireFox) Я получаю полный 12,5 Мб/с, что поддерживает мой веб-сервер. Используя FireFox, я загружаю файл примерно через 6 секунд, тогда как Java-код загружает файл через 12-30 секунд.

Вот очищенный фрагмент кода, который я тестирую, просто для иллюстрации подхода к загрузке файла.

[...] 

httpConn = (HttpURLConnection) (new URL(downloadURL)).openConnection(); 
httpConn.setRequestMethod("POST"); 
httpConn.setRequestProperty("Cookie", cookie); 

[...] 

try (InputStream is = httpConn.getInputStream(); 
     FileOutputStream fos = new FileOutputStream(targetFile)) {  

    int bytesRead; 
    byte[] buffer = new byte[4096]; 
    while ((bytesRead = is.read(buffer)) != -1) { 
     fos.write(buffer, 0, bytesRead); 
    } 
} 

[...] 

Я предполагаю, что есть узкое место где-то внутри этой части кода, которую я не могу получить.

Как увеличить скорость загрузки?

+0

Просто, чтобы прояснить, говорим ли мы 12,5 МБ/с или 12,5 Мбит/с? –

+0

Pardon, 12,5 мегабайт/с (100 Мбит). – phew

+2

Я бы попытался увеличить буфер 4k, чтобы сказать 256k. Буфер 4k необходимо заполнить ~ 3000 раз в секунду, чтобы заполнить вашу ссылку, которая может быть узким местом. –

ответ

0

Проблема была в размере буфера. Увеличение размера буфера от byte[4096] до byte[256000] значительно увеличило скорость загрузки. Кроме того, я сократил операции ввода-вывода в цикле while ((bytesRead = is.read(buffer)) != -1), который содержал обновление индикатора выполнения, заставляя его работать в своем потоке.

Кредиты идут на @Joachim Isaksson, который указал на буферное узкое место в комментариях выше.

Смежные вопросы