2012-08-01 69 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"); 
相关问题