2011-11-22 1 views
2

이 코드는 BufferedReader를 포함하고 있으며 웹 사이트에서 HTML 데이터를 읽습니다. 그러나 내가로드하는 사이트의 모든 페이지에는 600 줄의 HTML이 포함되어 있으므로 매번 데이터를 읽는 데 오랜 시간이 걸립니다. 나는 (예를 들어) 문자/단어 'on'으로 시작하는 줄을 읽지 않아도 코드를보다 효율적으로 만들고 싶습니다. 이 작업을 수행 할 수 있습니까? 이건 내 코드입니다 :Android Http BufferedReader를보다 효율적으로 만드실 수 있나요?

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 문자열을 반환합니다. "on"으로 시작하는 줄을 필터링하는 방법은 전체 줄을 먼저 읽지 않아도됩니까?

답변

3

"on"으로 시작하는 줄을 알아 보려면 먼저 줄 바꿈 문자가 있는지 확인해야합니다. 이렇게하려면 전체 줄을 읽어야합니다. 더 짧은 용어 - 아니 - 전체 스트림을 읽지 않고 스트림에서 특정 라인을 읽을 수 없습니다.

당신이 .skip() 메소드를 사용 할 수있는 라인의 위치를 ​​알고있는 경우 - 그러나 이것의 구현은 단순히 원하지 않는 바이트지나 읽을 수 있습니다.

관련 문제