【问题标题】:Source.fromInputStream exception handling during reading lines读取行期间的 Source.fromInputStream 异常处理
【发布时间】:2013-03-28 13:07:40
【问题描述】:

我创建了一个函数,我将输入流作为参数并返回一个由字符串组成的迭代器。我按如下方式完成:

def lineEntry(fileInputStream:InputStream):Iterator[String] = {
   Source.fromInputStream(fileInputStream).getLines()
}

我使用的方法如下:

val fStream = getSomeInputStreamFromSource()
lineEntry(fStream).foreach{
  processTheLine(_)
}

现在,如果 lineEntry 方法在使用 foreach 遍历输入流时遇到错误字符,很有可能会崩溃。

有哪些方法可以应对这种情况?

【问题讨论】:

    标签: scala file-io exception-handling iterator inputstream


    【解决方案1】:

    快速解决方案(适用于 Scala 2.10):

    def lineEntry(fileInputStream:InputStream):Iterator[String] = {
      implicit val codec = Codec.UTF8 // or any other you like
      codec.onMalformedInput(CodingErrorAction.IGNORE)
    
      Source.fromInputStream(fileInputStream).getLines()
    }
    

    在 Scala 2.9 中有一个小的区别:

    implicit val codec = Codec(Codec.UTF8)
    

    Codec 还有一些配置选项,您可以在这种情况下调整其行为。

    【讨论】:

    • 谢谢。在我的编译器版本中,scala.Source.IO.Codec.UTF8 似乎没有 onMalformedInput。这是 2.10 的功能吗?我正在使用 2.9.2
    • 我正在尝试这个:implicit val codec = Codec.UTF8.newDecoder() codec.onMalformedInput(CodingErrorAction.IGNORE)
    • 谢谢。我尚未对其进行测试,但我会将其标记为答案。你知道我在哪里可以找到 Codec 类的源代码吗?
    • 完美。感谢您的所有帮助。
    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2020-06-16
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多