Идиоматический способ преобразования InputStream в строку в Scala
У меня есть удобная функция, которую я использовал в Java для преобразования InputStream в строку. Вот прямой перевод на 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?
3 ответа:
Для Scala >= 2.11
scala.io.Source.fromInputStream(is).mkString
Для Scala
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
делает почти то же самое. Не знаю, почему вы хотите получить линии, а затем склеить их все вместе, хотя. Если вы можете предположить, что поток не блокируется, вы можете просто использовать
.available
, прочитать все это в массив байтов, и создать строку из этого непосредственно.