为什么Scala Source.fromURL比Apaches IOUtils慢?

Len*_*man 1 java io scala

我想弄清楚是否有更快的方法从URL使用Scala获取内容.使用Apache IOUtils我能够比Source.fromURLScala 更快地获取内容.以下是两者的代码:

使用Java:

    try {
        tmp=IOUtils.toString(new URL("http://gizmodo.com"));
        tmp=tmp.substring(tmp.indexOf("360\" title=")+12);
        tmp=tmp.substring(0,tmp.indexOf("\""));
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

使用Scala:

  val gizmodoPageLines = Source.fromURL("http://gizmodo.com").getLines.mkString("\n")
  val pos=gizmodoPageLines.indexOf("360\" title=")
  var tmp=gizmodoPageLines.substring(pos+12)
  tmp.substring(0,tmp.indexOf("\""))
Run Code Online (Sandbox Code Playgroud)

在Java中它需要大约:155899 ns

在Scala中:343880 ns

为什么Scala代码这么慢?

Ste*_*lle 7

因为在你第一次从缓冲区读取时,在你的第二次读取时你会逐行阅读.

Source.getLines不是作为IOUtils或其他任何库的银弹替代品,它旨在逐行读取.您可以在Scala中完美地使用IOUtils.