簡體   English   中英

在Scala中將InputStream轉換為String的慣用法

[英]Idiomatic way to convert an InputStream to a String in Scala

我有一個方便的函數,我在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 ,將整個內容讀入字節數組,並直接從中創建字符串。

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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM