将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 }