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