Струнные операции висят на андроиде? - PullRequest
0 голосов
/ 15 сентября 2011

Я пишу приложение для Android, которое требует, чтобы я извлек HTML-код веб-страницы и получил и возвратил определенные элементы.По какой-то причине кажется, что код зависает или занимает невероятно много времени, выполняя базовые строковые операции.

    URL url = new URL(link);
    URLConnection urlConnection = url.openConnection();
    InputStreamReader i = new InputStreamReader(
            urlConnection.getInputStream());
    BufferedReader in = new BufferedReader(i);
    String check = "";
    String html = "";
    while((check = in.readLine()) != null)
        html += check;

Требуется минуты для выполнения как на эмуляторе, так и на устройстве с университетской скоростью соединения.Принимая во внимание, что

    URL url = new URL(link);
    URLConnection urlConnection = url.openConnection();
    InputStreamReader i = new InputStreamReader(
            urlConnection.getInputStream());
    BufferedReader in = new BufferedReader(i);
    String check = "";
    String html = "";
    int p = 0;
    while((check = in.readLine()) != null)
        p++;

занимает ~ 5 секунд и возвращает правильное количество строк на HTML-странице.Почему строковые операции занимают так много времени?Просто для перспективы, страница имеет длину около 4000 строк.

1 Ответ

2 голосов
/ 15 сентября 2011

Потому что вы делаете это неправильно.Используйте StringBuilder для создания больших строк.

StringBuilder sb = new StringBuilder();
while((check = in.readLine()) != null)
    sb.append(check);
html = sb.toString();

Почему StringBuilder при наличии строки?

String не позволяет добавлять.Каждый метод, который вы вызываете для String, создает новый объект и возвращает его.Это потому, что String является неизменным - он не может изменить свое внутреннее состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...