据我所知,Scala解析器组合器需要将整个文件放在内存中,对于大小为几十GB的文件来说它并不实用。无论如何,解析器组合库比手头的任务所需的功能更强大,所以我正在考虑推出简单的FSA解析器。是否有一些图书馆可供选择,或者除了switch
以外的文字墙外没有别的办法?
答案 0 :(得分:0)
据我所知,Scala解析器组合器需要整个文件 在内存中,对于几十个文件来说这不太实用 千兆字节大小
如果您需要解析一个巨大的文件,可以使用BufferedReader
并使用该阅读器调用parseAll
。像这样:
val bufferedReader: BufferedReader = ???
val myResult = MyParser.parseAll(MyParser.rootParser, bufferedReader)
这样就会以块的形式读取文件,这样就不会因为内存不足而烦恼。
或者,如果您需要特定于解析器组合器API的读取器,则可以从PagedSeqReader
创建bufferedSource
。
val rdr = new PagedSeqReader(PagedSeq.fromReader(Source.fromFile(new File("huge_file")).bufferedReader()))