微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 使用Apache Commons lineIterator时出现OutOfMemory错误

我正在尝试使用Apache Commons FileUtils.lineIterator逐行迭代1.2GB文件.但是,只要LineIterator调用hasNext(),我就会得到一个java.lang.OutOfMemoryError:Java堆空间.我已经为Java堆分配了1G.

在这里做错了什么?在阅读了一些文档之后,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()
  }

谢谢你的帮助!

解决方法:

代码看起来不错.可能它没有在文件中找到一行的结尾,并且在内存中读取一条大于1Gb的非常长的行.

在Unix中尝试wc -l,看看你得到了多少行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐