在Scala中将InputStream转换为String的惯用法

时间:2011-03-07 15:31:28

标签: string scala inputstream

我有一个方便的函数,我在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中有没有惯用的方法呢?

3 个答案:

答案 0 :(得分:172)

对于Scala> = 2.11

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

对于Scala< 2.11:

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

几乎完全相同。不知道为什么你想要获得线条,然后将它们全部粘合在一起。如果您可以假设流的非阻塞,您可以使用.available,将整个内容读入字节数组,并直接从中创建一个字符串。

答案 1 :(得分:73)

Source.fromInputStream(is).mkString("") 也会做这件事......

答案 2 :(得分:12)

更快的方法:

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