Я загружаю изображение с моего веб-сервера следующим образом:
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. Сохранять разрывы строк не важно.
Спасибо
Я предполагаю, что самое слабое звено здесь — сеть / сервер, но в любом случае вы можете улучшить производительность 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();
Если цикл запускается не часто, улучшение производительности может быть не таким значительным, но, поскольку вы загружаете образ, полагаю, он запускается довольно много раз.
Других решений пока нет …