J'ai une fonction pratique que j'ai utilisée dans Java pour convertir un InputStream en String. Voici une traduction directe en 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
}
Existe-t-il un moyen idiomatique de faire cela en scala?
Pour Scala> = 2.11
scala.io.Source.fromInputStream(is).mkString
Pour Scala <2.11:
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
fait à peu près la même chose. Vous ne savez pas pourquoi vous voulez obtenir des lignes et les recoller ensuite ensemble. Si vous pouvez supposer que le flux n'est pas bloquant, vous pouvez simplement utiliser .available
, lisez le tout dans un tableau d'octets et créez directement une chaîne.
Source.fromInputStream(is).mkString("")
fera également l'acte .....
Manière plus rapide de faire ceci:
private def inputStreamToString(is: InputStream) = {
val inputStreamReader = new InputStreamReader(is)
val bufferedReader = new BufferedReader(inputStreamReader)
Iterator continually bufferedReader.readLine takeWhile (_ != null) mkString
}