InputStreamをStringに変換するためにJavaで使用した便利な関数があります。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でこれを行う慣用的な方法はありますか?
Scala> = 2.11
scala.io.Source.fromInputStream(is).mkString
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
}