2012-08-01 118 views
0

我有這個,但我想知道如果有一個更快的方法:使用java獲取HTML內容的最快方法是什麼?

 URL url=new URL(page); 
     InputStream is = new BufferedInputStream(url.openConnection().getInputStream()); 
     BufferedReader in=new BufferedReader(new InputStreamReader(is)); 
     String tmp=""; 
     StringBuilder sb=new StringBuilder(); 
     while((tmp=in.readLine())!=null){ 
      sb.append(tmp); 
     } 
+0

該代碼使用系統的默認字符集...這是很好的,只要頁面內容使用相同的字符集。 – dnault 2012-08-01 21:46:03

回答

4

也許網絡是最大的開銷,沒有太多你可以在Java代碼側做。但使用IOUtils至少要快得多:

String page = IOUtils.toString(url.openConnection().getInputStream()); 

請記住關閉基礎流。

+0

這是正確的,IOUtils方法在一行中做同樣的事情,除了它使用StringBuffer而不是StringBuilder – 2012-08-01 21:46:57

+1

+1,這很簡單並且可能足夠快。如果沒有,我想你可以讀取Content-Length頭並預先分配一個與內容大小完全一樣的字節緩衝區,然後將字節數組傳遞給一個String構造函數......但這看起來像是過度殺傷。 – dnault 2012-08-01 21:51:52

3

如果你需要操作你的html,找一些庫。例如jsoup

jsoup是一個用於處理真實世界HTML的Java庫。它爲 提供了一個非常方便的API,用於提取和操作數據,使用最好的DOM,CSS和類似jquery的方法。

例子:

Document doc = Jsoup.connect("http://en.wikipedia.org/").get(); 
Elements newsHeadlines = doc.select("#mp-itn b a"); 
0

如果你使用Apache下議院IO的IOUtils作爲托馬斯建議,還有一個更簡單的方法:toString(URL),或者接受一個字符集(當然其首選的表兄弟,需要知道資源的字符集提前)。

String string = IOUtils.toString(new URL("http://some.url")); 

String string = IOUtils.toString(new URL("http://some.url"), "US-ASCII"); 
相關問題