【问题标题】:Groovy: Handling large amounts of data with StreamingMarkupBuilderGroovy:使用 StreamingMarkupBuilder 处理大量数据
【发布时间】:2010-10-20 08:45:25
【问题描述】:

场景如下。我有一个纯文本文件,其中包含 2,000,000 行的 ID。此 ID 列表需要转换为简单的 XML 文件。只要输入文件中只有几千个条目,以下代码就可以正常工作。

def xmlBuilder = new StreamingMarkupBuilder()
def f = new File(inputFile)
def input = f.readLines()
def xmlDoc = {
  Documents {
    input.each {
      Document(myAttribute: it)
    }
  }
}

def xml = xmlBuilder.bind(xmlDoc)
f.write(xml)

如果处理了 2,000,000 个条目,我将收到 Java 堆(设置为 1024M)的 OutOfMemoryException。有没有办法改进上述代码,使其能够处理大量数据?

干杯, 罗伯特

【问题讨论】:

    标签: xml groovy memory-management out-of-memory


    【解决方案1】:

    该解决方案的问题是它在写出之前将所有内容加载到内存中......

    这可能是一个更好的解决方案,因为我认为它应该在处理input.txt 时将数据写入文件output.xml

    import groovy.xml.MarkupBuilder
    
    new File( 'output.xml' ).withWriter { writer ->
      def builder = new MarkupBuilder( writer )
      builder.Documents {
        new File( 'input.txt' ).eachLine { line ->
          Document( attr: line )
        }
      }
    }
    

    【讨论】:

      【解决方案2】:

      这是你的问题:def input = f.readLines() ;-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-22
        • 2018-09-17
        • 2017-02-09
        相关资源
        最近更新 更多