将InputStream转换为Scala中的string的习惯性方法

我有一个方便的函数,我已经在Java中用于将InputStream转换为string。 这里是对Scala的直接翻译:

def inputStreamToString(is: InputStream) = { val rd: BufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8")) val builder = new StringBuilder() try { var line = rd.readLine while (line != null) { builder.append(line + "\n") line = rd.readLine } } finally { rd.close } builder.toString } 

有没有一个惯用的方式来做到这一点在斯卡拉?

对于Scala> = 2.11

 scala.io.Source.fromInputStream(is).mkString 

对于Scala <2.11:

 scala.io.Source.fromInputStream(is).getLines().mkString("\n") 

做几乎相同的事情。 不知道为什么你想要得到线条,然后把它们粘在一起。 如果你可以假定stream的非阻塞,你可以使用.available ,把整个东西读入一个字节数组,然后直接创build一个string。

Source.fromInputStream(is).mkString("")也会做的事情…..

更快的方法来做到这一点:

  private def inputStreamToString(is: InputStream) = { val inputStreamReader = new InputStreamReader(is) val bufferedReader = new BufferedReader(inputStreamReader) Iterator continually bufferedReader.readLine takeWhile (_ != null) mkString }