bba*_*ant 104 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
}
Run Code Online (Sandbox Code Playgroud)
在scala中有没有惯用的方法呢?
Rex*_*err 181
对于Scala> = 2.11
scala.io.Source.fromInputStream(is).mkString
Run Code Online (Sandbox Code Playgroud)
对于Scala <2.11:
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
Run Code Online (Sandbox Code Playgroud)
几乎完全相同的事情.不知道为什么你想要获得线条,然后将它们全部粘合在一起.如果你可以假设流的非阻塞,你可以使用.available,将整个事物读入一个字节数组,并直接从中创建一个字符串.
小智 73
Source.fromInputStream(is).mkString("")
也会做这件事......
Kam*_*nek 12
更快的方法:
private def inputStreamToString(is: InputStream) = {
val inputStreamReader = new InputStreamReader(is)
val bufferedReader = new BufferedReader(inputStreamReader)
Iterator continually bufferedReader.readLine takeWhile (_ != null) mkString
}
Run Code Online (Sandbox Code Playgroud)