使用java获取HTML内容的最快方法是什么?
我有这个,但我想知道是否有更快的方法:使用java获取HTML内容的最快方法是什么?,java,inputstream,bufferedinputstream,Java,Inputstream,Bufferedinputstream,我有这个,但我想知道是否有更快的方法: URL url=new URL(page); InputStream is = new BufferedInputStream(url.openConnection().getInputStream()); BufferedReader in=new BufferedReader(new InputStreamReader(is)); String tmp=""; String
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);
}
网络可能是最大的开销,在Java代码方面你做不了多少。但使用至少要快得多:
String page = IOUtils.toString(url.openConnection().getInputStream());
记住关闭底层流。如果需要处理html,请查找一些库。比如说 jsoup是一个用于处理真实HTML的Java库。它提供 用于提取和操作数据的非常方便的API,使用 最好的DOM、CSS和类似jquery的方法 例如:
Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");
如果您像Tomasz建议的那样使用ApacheCommons IO的IOUtils,那么有一个更简单的方法:,或者它的首选同类方法,它使用一个字符集(当然,这需要事先知道资源的字符集) 或
此代码使用系统的默认字符集。。。只要页面内容使用相同的字符集就可以了。没错,IOUtils方法在一行中执行相同的操作,只是它使用了StringBuffer而不是StringBuilder+1,这很简单,而且可能足够快。如果没有,我想您可以读取Content-Length头并预先分配一个与内容大小完全相同的字节缓冲区,然后将字节数组传递给字符串构造函数。。。但这似乎太过分了。
String string = IOUtils.toString( new URL( "http://some.url" ));
String string = IOUtils.toString( new URL( "http://some.url" ), "US-ASCII" );