2

パラメータとして入力ストリームを受け取り、文字列で構成されるイテレータを返す関数を作成しました。私は次のようにこれを達成します:

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

私は次のようにメソッドを使用します。

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

foreach を使用して入力ストリームを反復処理しているときに、メソッド lineEntry が不正な文字に遭遇すると、異常終了する可能性が非常に高くなります。

この状況に対抗する方法にはどのようなものがありますか?

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 に答える