【问题标题】:What is the fastest way to get a HTML Content using java?使用 java 获取 HTML 内容的最快方法是什么?
【发布时间】:2012-07-30 20:41:27
【问题描述】:

我有这个,但我想知道是否有更快的方法:

        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 inputstream bufferedinputstream


【解决方案1】:

可能网络是最大的开销,在 Java 代码方面您无能为力。但是使用IOUtils 至少实现起来要快得多:

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

记得关闭底层流。

【讨论】:

  • 没错,IOUtils 方法在一行中做同样的事情,只是它使用 StringBuffer 而不是 StringBuilder
  • +1,这很简单而且可能足够快。如果没有,我想您可以读取 Content-Length 标头并预先分配与内容大小完全相同的字节缓冲区,然后将字节数组传递给 String 构造函数……但这似乎有点过头了。
【解决方案2】:

如果您需要使用 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");

【讨论】:

    【解决方案3】:

    如果您按照 Tomasz 的建议使用 Apache Commons IO 的 IOUtils,还有一个更简单的方法:toString(URL),或者它的首选表亲,采用字符集(当然,这需要提前知道资源的字符集)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2014-02-13
      相关资源
      最近更新 更多