Java 比较两个大型xml文件时出现内存不足错误

Java 比较两个大型xml文件时出现内存不足错误,java,xmlunit,Java,Xmlunit,我试图用XMLUNIT比较两个大的XML文件,但是我得到了“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间” publicstaticvoidmain(字符串[]args)引发异常{ FileReader文件=新的FileReader(“C:/abc/a.xml”); FileReader file1=新的FileReader(“C:/abc/b.xml”); assertXMLEquals(文件,文件1); } 公共静态void assertXML

我试图用XMLUNIT比较两个大的XML文件,但是我得到了“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”

publicstaticvoidmain(字符串[]args)引发异常{
FileReader文件=新的FileReader(“C:/abc/a.xml”);
FileReader file1=新的FileReader(“C:/abc/b.xml”);
assertXMLEquals(文件,文件1);
}
公共静态void assertXMLEquals(FileReader expectedXML,FileReader actualXML)引发异常{
DetailedDiff差=null;
试一试{
//检查每个节点
差异=新的DetailedDiff(XMLUnit.compareXML(expectedXML,actualXML));
}捕获(例外e){
}
如果(!difference.similor()){
列出所有差异=差异。getAllDifferences();
System.out.println(“由于以下错误,Xml比较失败:\n”+所有差异);
}
}

解决方案-我在Eclipse运行配置中添加了“-Xms2048M-Xmx2048M”作为参数。您尝试过使用SAX解析器吗? 它将解决您的问题,因为它不需要将整个文件加载到内存中来处理它


顺便问一下,您的文件大小是多少?

您是否尝试过使用SAX解析器? 它将解决您的问题,因为它不需要将整个文件加载到内存中来处理它


顺便问一下,您的文件大小是多少?

我没有使用xmlunit。但是看看xmlunit文档,您似乎可以使用流作为输入

例如: BufferedInputStream in=新BufferedInputStream(新文件输入流(路径名))

使用流不会一次将整个文件加载到内存中

但是要获得OutOfMemoryError异常,文件应该非常大。您还可以在启动时增加应用程序的最大堆大小

例如:将最小堆大小(xms)和最大堆大小(xmx)增加到2GB


java-Xms2048mm-Xmx2048m

我没有使用xmlunit。但是看看xmlunit文档,您似乎可以使用流作为输入

例如: BufferedInputStream in=新BufferedInputStream(新文件输入流(路径名))

使用流不会一次将整个文件加载到内存中

但是要获得OutOfMemoryError异常,文件应该非常大。您还可以在启动时增加应用程序的最大堆大小

例如:将最小堆大小(xms)和最大堆大小(xmx)增加到2GB


java-Xms2048mm-Xmx2048m

我的文件大小是55MB。你能给我提供SAX解析器的示例或任何链接吗?你可以查看像tutorialspoint或journaldev这样的网站。示例代码在那里随时可用。e、 g.如果您发现使用此文件有任何困难,请告诉我。我的文件大小为55MB。您可以提供SAX解析器的示例或任何链接吗?您可以查看像TutorialPoint或journaldev这样的网站。示例代码在那里随时可用。e、 g.如果您发现使用它有任何困难,请告诉我。我在Eclipse运行配置中添加了“-Xms2048M-Xmx2048M”作为参数。它对我很有效。谢谢我在Eclipse运行配置中添加了“-Xms2048M-Xmx2048M”作为参数。谢谢
public static void main(String[] args) throws Exception {
    FileReader file = new FileReader("C:/abc/a.xml");

    FileReader file1 = new FileReader("C:/abc/b.xml");
    assertXMLEquals(file, file1);
}


public static void assertXMLEquals(FileReader expectedXML, FileReader actualXML) throws Exception {

        DetailedDiff difference = null;
        try {
            // Checks each Node
            difference = new DetailedDiff(XMLUnit.compareXML(expectedXML, actualXML));
        } catch (Exception e) {

        }

        if (!difference.similar()) {
            List<Difference> AllDifferences = difference.getAllDifferences();
            System.out.println("Xml comparison failed because of follwoing error/s : \n"+AllDifferences);
        }
    }