我正在尝试使用 Apache Commons 逐行迭代 1.2GB 文件FileUtils.lineIterator
。但是,只要一个LineIterator
电话hasNext()
,我就会得到一个java.lang.OutOfMemoryError: Java heap space
. 我已经分配1G
给java堆了。
我在这里做错了什么?在阅读了一些文档之后,不是 LineIterator 应该从文件系统中读取文件而不是将其加载到内存中吗?
请注意,代码在 Scala 中:
val file = new java.io.File("data_export.dat")
val it = org.apache.commons.io.FileUtils.lineIterator(file, "UTF-8")
var successCount = 0L
var totalCount = 0L
try {
while ( {
it.hasNext()
}) {
try {
val legacy = parse[LegacyEvent](it.nextLine())
BehaviorEvent(legacy)
successCount += 1L
} catch {
case e: Exception => println("Parse error")
}
totalCount += 1
}
} finally {
it.close()
}
感谢您在这里的帮助!