2

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

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

我使用的方法如下:

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

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

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

4

1 回答 1

4

快速解决方案(适用于 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还有一些配置选项,您可以在这种情况下调整其行为。

于 2013-04-06T00:16:05.420 回答