[string] 스칼라에서 InputStream을 문자열로 변환하는 관용적 방법

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> = 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
    }


답변