如何在不超出堆大小的情况下解析Groovy中的大文件?

Chr*_*ris 10 groovy

解析大文件时,我收到以下错误 Caught: java.lang.OutOfMemoryError: Java heap space

如何在不超出堆大小的情况下解析Groovy中的大文件?

大文件失败的示例代码...

import java.io.File

def inputFile = new File("c:/dev/test.txt")
    inputFile.getText().eachLine{ it, i ->
            ... do something with each line
        }
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 17

确保您以不会将整个文件加载到内存中的方式迭代文件...

  • 在这种情况下,专门将inputFile.getText().eachLine转换为inputFile.eachLine
  • 不要使用.readLines(),因为它会尝试将整个文件加载到内存中.应该使用eachLine {..}
  • 您还可以通过使用扩展堆的大小与一个JVM标志,例如为1GB groovy -Xmx1024M myscript.groovy参见回答这里

有关详细信息和进一步讨论,请参阅groovy邮件列表中的此页面

没有堆空间错误的代码...

def inputFile = new File("c:/dev/test.txt")
inputFile.eachLine{ it, i ->
        ... do something with each line
    }
Run Code Online (Sandbox Code Playgroud)

  • 只要它不是一条巨大的线,这是可以的.它可以归结为他/她打算对数据做什么. (5认同)