Я отправляю HTTP get-запрос на веб-сайт для приложения для Android, которое я создаю.
Я использую DefaultHttpClient и использую HttpGet для отправки запроса. Я получаю ответ сущности и из этого получаю объект InputStream для получения html страницы.
Затем я циклически просматриваю ответ, выполняя следующие действия:
BufferedReaderr=newBufferedReader(newInputStreamReader(inputStream)); Stringx=""; x = r.readLine(); Stringtotal="";
while(x!= null){ total += x; x = r.readLine(); }
Однако это ужасно медленно.
Это неэффективно? Я не загружаю большую веб-страницу - www.cokezone.co.uk поэтому размер файла невелик. Есть ли лучший способ сделать это?
Спасибо
Энди
Переведено автоматически
Ответ 1
Проблема вашего кода в том, что он создает множество тяжелых String объектов, копирует их содержимое и выполняет операции над ними. Вместо этого вам следует использовать StringBuilder чтобы избежать создания новых String объектов при каждом добавлении и избежать копирования массивов символов. Реализация для вашего случая будет примерно такой:
Теперь вы можете использовать total без преобразования в String, но если вам нужен результат в виде String, просто добавьте:
Результат строки = total.toString();
Я постараюсь объяснить это лучше...
a += b (or a = a + b), где a и b являются строками, копирует содержимое обоихaиba в новый объект (обратите внимание, что вы также копируете , который содержит Stringнакопленные данные, и вы делаете эти копии на каждой итерации.
a.append(b), где a - это StringBuilder, напрямую добавляет b содержимое к a, поэтому вы не копируете накопленную строку на каждой итерации.
Ответ 2
Вы пробовали встроенный метод преобразования потока в строку? Это часть библиотеки Apache Commons (org.apache.commons.io.IOUtils).