私はメモリ上の問題があり、メモリが足りないファイルを解析するのが最善の方法だろうと思います。今、私はこれを持っています、イテレータ[String]Iterator [String]を解析するためのReaderインスタンスに変換する方法はありますか?
val myIterator: Iterator[String] = io.Source.fromURL("http://somewebsite.com/download/bigFile.txt").getLines().filter(isValidInput)
私はそれを解析したいと思います。
val result = MyParser.parseAll(MyParser.line, ???)
それはjava.io.Reader
を必要とし、私はすでにStringReader
を試してみましたが、それは私のコンピュータを殺します。イテレータをリーダーに変換する方法はありますか?
私はまた、以下のことを試みましたが、解析後の結果は0です。私は何か間違っていると思います。
import java.io.{BufferedReader, InputStreamReader}
import scala.collection.JavaConverters._
val stream: InputStream = new SequenceInputStream({
val i = myIterator map { s => new ByteArrayInputStream(s.getBytes("UTF-8")) }
i.asJavaEnumeration
})
val in = new BufferedReader(new InputStreamReader(stream))
val result = MyParser.parseAll(MyParser.line, in)
'新しいInputStreamReaderの(新しいURL( "のhttp:// ...").openStream)を取得するために' – Dima
は私が消費Iteratorは私のコードのどこかにあるので、それは私の2番目の問題を解析してみました。それは解析しようとしますが、私のコンピュータはそれを行っている間にフリーズします。それはおそらく問題の解決策でもありません。 – User1232187
@Dima私は解析する前にいくつかのフィルタリングを行います。これは、不要な行をすべて削除し、パーサーをあまり複雑にしないようにするためです。 List [String]またはIterator [String]からInputStreamReader、BufferedReaderなどを作成する方法はありますか? – User1232187