Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VTD XML(Java)VTDNAV将XPath结果写入文件_Java_Xml_Performance_Vtd Xml - Fatal编程技术网

VTD XML(Java)VTDNAV将XPath结果写入文件

VTD XML(Java)VTDNAV将XPath结果写入文件,java,xml,performance,vtd-xml,Java,Xml,Performance,Vtd Xml,我正在试验VTD XML,因为我经常需要修改巨大的XML文件(2-10GB或更多) 我正在尝试将XPath查询结果写回文件。 但是,用VTD XML编写大型文件对我来说并不明显: XMLMemMappedBuffer的getBytes()方法“未实现”(请参阅) 作者之一(?)在此线程中给出了一个代码示例(最后一篇文章,2010-04-21): 然而,这个例子已经过时了 long la = vnh.getElementFragment(); 返回长[]的数组(请参阅) 像这样调整相关线路 lo

我正在试验VTD XML,因为我经常需要修改巨大的XML文件(2-10GB或更多)

我正在尝试将XPath查询结果写回文件。 但是,用VTD XML编写大型文件对我来说并不明显:

  • XMLMemMappedBuffer的getBytes()方法“未实现”(请参阅)

  • 作者之一(?)在此线程中给出了一个代码示例(最后一篇文章,2010-04-21):

  • 然而,这个例子已经过时了

    long la = vnh.getElementFragment();
    
    返回长[]的数组(请参阅)

    像这样调整相关线路

    long[] la = vnh.getElementFragment();
    vnh.getXML().writeToFileOutputStream(new FileOutputStream("c:/text2.xml"), (int)la[0], (int)la[1]);
    
    导致以下错误:

    Exception in thread "main" java.nio.channels.ClosedChannelException
        at sun.nio.ch.FileChannelImpl.ensureOpen(Unknown Source)
        at sun.nio.ch.FileChannelImpl.transferTo(Unknown Source)
        at com.ximpleware.extended.XMLMemMappedBuffer.writeToFileOutputStream(XMLMemMappedBuffer.java:104)
        at WriteXML.main(WriteXML.java:16)
    
    问题:

    • 这个错误是由代码中的任何明显错误引起的吗
    • 您将使用哪些工具来处理大型XML文件(~10GB) 有效地?(不必是Java。)
    我的目标是做简单的事情 转换或拆分xml并以非常好的速度写回文件
    演出谢谢

    无法回答您的第一个问题,但是对于第二个问题,如果您正在寻找不同的技术,那么流式XSLT 3.0是一个需要探索的技术:如果不了解您的需求的更多细节,就无法判断它是否真的适合。

    无法回答您的第一个问题,但是对于第二个问题,如果您正在寻找不同的技术,那么流式XSLT 3.0是一个需要探索的技术:如果不了解您的需求的更多细节,就无法判断它是否真正适合。

    首先,要处理您提到的大容量XML,我建议您使用mem映射模式将XML加载到内存中。而且,由于vtd xml不会改变xml的基本字节格式,因此可以很容易地想象节省大量来回编码/解码字节移动操作及其性能优势

    正如您所指出的,XMLMemMappedBuffer getBytes没有实现。。。这是为了避免在片段非常大时过度使用内存

    解决方法是使用XMLMemMappedBuffer的writeToFileOutputStream()方法直接将其转储到输出。换句话说,如果你知道碎片的偏移量和长度。。。getBytes通常是可绕过的

    下面是该方法的签名文件

    public void writeToFileOutputStream(java.io.FileOutputStream, 长os, (长透镜) 抛出java.io.IOException
    将段(由其偏移量和长度表示)写入输出文件流

    首先,要处理您提到的大尺寸XML,我建议您使用mem map模式将XML加载到内存中。而且,由于vtd xml不会改变xml的基本字节格式,因此可以很容易地想象节省大量来回编码/解码字节移动操作及其性能优势

    正如您所指出的,XMLMemMappedBuffer getBytes没有实现。。。这是为了避免在片段非常大时过度使用内存

    解决方法是使用XMLMemMappedBuffer的writeToFileOutputStream()方法直接将其转储到输出。换句话说,如果你知道碎片的偏移量和长度。。。getBytes通常是可绕过的

    下面是该方法的签名文件

    public void writeToFileOutputStream(java.io.FileOutputStream, 长os, (长透镜) 抛出java.io.IOException
    将段(由其偏移量和长度表示)写入输出文件流

    感谢@vtd xml作者的回复。你能帮我理解为什么我会出现上述错误吗?(顺便说一句,如果能在VTD博客上找到更多关于VTDHuge的最新示例,尤其是将一些转换后的输出xml保存到文件中的示例,那就太好了。)你能把一个测试用例放在一起,这样我就可以在这方面做一些挖掘了吗?谢谢你的回复@VTD xml作者。你能帮我理解为什么我会出现上述错误吗?(顺便说一句,如果能在VTD博客上找到更多关于VTDHuge的最新示例,尤其是将一些转换后的输出xml保存到文件中的示例,那就太好了。)你能把一个测试用例放在一起,这样我就可以在这方面做一些挖掘了吗?我想有一个bug应该已经修复了,它可能只检查到了cvsI。我认为有一个应该被修复的bug,它可能只检查到了cvs