string - Forma idiomática de convertir un InputStream a una cadena en Scala
(3)
Para Scala> = 2.11
scala.io.Source.fromInputStream(is).mkString
Para Scala <2.11:
scala.io.Source.fromInputStream(is).getLines().mkString("/n")
hace más o menos lo mismo. Sin embargo, no estoy seguro de por qué quiere obtener líneas y luego pegarlas todas juntas. Si puede asumir que la secuencia no se bloquea, puede usar .available
, leer todo en una matriz de bytes y crear una cadena a partir de eso.
Tengo una función útil que he usado en Java para convertir un InputStream en una cadena. Aquí hay una traducción directa a 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
}
¿Hay una manera idiomática de hacer esto en Scala?
Una forma más rápida de hacer esto:
private def inputStreamToString(is: InputStream) = {
val inputStreamReader = new InputStreamReader(is)
val bufferedReader = new BufferedReader(inputStreamReader)
Iterator continually bufferedReader.readLine takeWhile (_ != null) mkString
}
Source.fromInputStream(is).mkString("")
también hará la escritura .....