developer tip

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

copycodes 2020. 8. 17. 09:13
반응형

스칼라에서 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
    }

참고 URL : https://stackoverflow.com/questions/5221524/idiomatic-way-to-convert-an-inputstream-to-a-string-in-scala

반응형