1. ホーム
  2. string

[解決済み] ScalaでInputStreamを文字列に変換する方法

2022-10-02 06:47:02

質問

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
  }

scalaでこれを行うイディオム的な方法はありますか?

どのように解決するのですか?

Scalaの場合 >= 2.11

scala.io.Source.fromInputStream(is).mkString

Scala 2.11の場合。

scala.io.Source.fromInputStream(is).getLines().mkString("\n")

はほとんど同じことをします。 しかし、なぜ行を取得して、それらをすべて一緒に接着したいのか、よくわかりません。 もし、ストリームがノンブロッキングであると仮定できるなら、単に .available を使い、全体をバイト配列に読み込んで、そこから直接文字列を作成することができます。