Scala 中将 InputStream 转换为 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 中有没有这样做的惯用方法?

69815 次浏览

对于 Scala > = 2.11

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

For Scala < 2.11:

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

基本上都是一样的。不知道为什么你想得到线,然后把它们粘在一起,虽然。如果可以假定流是非阻塞的,那么只需使用 .available,将整个内容读入一个字节数组,然后直接从该数组创建一个字符串。

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
}