我创建了一个函数,我将输入流作为参数并返回由字符串组成的迭代器。我完成如下:
def lineEntry(fileInputStream:InputStream):Iterator[String] = {
Source.fromInputStream(fileInputStream).getLines()
}
我使用如下方法:
val fStream = getSomeInputStreamFromSource()
lineEntry(fStream).foreach{
processTheLine(_)
}
现在很有可能方法lineEntry在使用foreach迭代输入流时遇到坏字符时可能会爆炸。
有什么方法可以解决这种情况?
答案 0 :(得分: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
还有一些配置选项,您可以在这些情况下调整其行为。