scala - 读取行期间的 Source.fromInputStream 异常处理

标签 scala file-io exception iterator inputstream

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

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

我使用的方法如下:

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

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

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

最佳答案

快速解决方案(适用于 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)

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

关于scala - 读取行期间的 Source.fromInputStream 异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15845422/

相关文章:

java - 在java中发送一个int。有时会引发异常?

scala - Spark 应用程序中的作业总数

python - 在 python 中使用异常和文件时清理

c++ - 逐行读取字符串文本文件的最快方法

perl - 如何摆脱 Perl 中的命令式文件打开?

unit-testing - Flutter Mockito - 模拟抛出异常

html - Lift 将单个标签拆分成对会导致问题

scala 2.12.1 ClassNotFoundException 产品$类

scala - 在 Scala ActiveRecord 中使用 groupby 编写联接查询

python - Scrapy - 在未返回项目字段之一时处理异常