Java — BufferedReader работает очень медленно

Я загружаю изображение с моего веб-сервера следующим образом:

conn = url.openConnection();
conn.setDoOutput(true);
wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();

rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((resp = rd.readLine()) != null) {
downloadedImage += resp;
}

Однако это очень медленно. Загрузка одного файла размером 500 КБ занимает около 15 секунд. Есть ли лучший способ скачать изображение?

Если это имеет значение: файл отформатирован в виде x строк по 80 символов в UTF-8. Сохранять разрывы строк не важно.

Спасибо

1

Решение

Я предполагаю, что самое слабое звено здесь — сеть / сервер, но в любом случае вы можете улучшить производительность while петля немного.

С помощью += в основном создает новый StringBuilder каждый раз вы вызываете это. Так string1 += string2 это то же самое, что вызов string1 = new StringBuilder(string1).append(string2).toString(); Очевидно, вы никогда бы не сделали это в цикле, который запускается х раз. Так что вместо этого создайте один StringBuilder прежде чем начать цикл, и вызвать toString() после завершения.

StringBuilder stringBuilder = new StringBuilder(downloadedImage);
while ((resp = rd.readLine()) != null) {
stringBuilder.append(resp);
}
downloadedImage = stringBuilder.toString();

Если цикл запускается не часто, улучшение производительности может быть не таким значительным, но, поскольку вы загружаете образ, полагаю, он запускается довольно много раз.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]