Сделать Android Http BufferedReader более эффективным? - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть этот код, который содержит BufferedReader и считывает данные HTML с веб-сайта.Однако каждая страница с сайта, который я загружаю, содержит около 600 строк HTML-кода, поэтому каждый раз для чтения данных требуется много времени.Я хочу, чтобы код был более эффективным, не читая строки, которые начинаются (например) с букв / слова 'on'.Можно ли это сделать?Это мой код:

public String getInternetData(String s) throws Exception { 
    BufferedReader in = null;  
    try{ 
        HttpClient client = new DefaultHttpClient(); 
        URI website = new URI(s);
        HttpGet request = new HttpGet(); 
        request.setURI(website); 
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer(""); 
        String l = ""; 
        String nl = System.getProperty("line.seperator");
        while(((l = in.readLine()) != null)){
            sb.append(l+nl); 
            }
        in.close();
        return sb.toString(); 
    }finally{
        try { 
            if(in != null) { 
                in.close(); 
            }
        }catch(Exception e){ 
            e.printStackTrace(); 
        }
}

}

Этот код полностью работает и возвращает строку с HTML всей веб-страницы.Есть ли способ отфильтровать строки, начинающиеся с «вкл», без предварительного чтения всей строки?

1 Ответ

3 голосов
/ 22 ноября 2011

Чтобы узнать, начинается ли строка с «вкл», вы должны сначала определить, был ли символ перевода строки. Для этого вы должны прочитать всю строку. В более короткие сроки - нет - невозможно прочитать определенные строки из потока без чтения всего потока.

Если вы знали положение строк, вы могли бы использовать метод .skip () - но реализация этого могла бы просто читать за байты, которые не нужны.

...