Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 什么';反序列化和序列化xml文档的最快方法是什么?_Java_Xml_Dom - Fatal编程技术网

Java 什么';反序列化和序列化xml文档的最快方法是什么?

Java 什么';反序列化和序列化xml文档的最快方法是什么?,java,xml,dom,Java,Xml,Dom,我正在使用Java6处理一些相当大的xml文档…我需要解析它们并修改一些值,然后序列化回磁盘 我使用org.w3c.DOM对xml文档进行反序列化,并修改了一些属性值,还使用JAXP Transformer对已更改的DOM文档进行序列化。但是我发现它真的很慢 所以我想知道有没有更有效的方法来序列化dom文档或处理大型xml文档 更新: 我使用计时器记录每个部件所需的时间,以下是序列化: // serialize the updated DOM TransformerFactory transfo

我正在使用Java6处理一些相当大的xml文档…我需要解析它们并修改一些值,然后序列化回磁盘

我使用org.w3c.DOM对xml文档进行反序列化,并修改了一些属性值,还使用JAXP Transformer对已更改的DOM文档进行序列化。但是我发现它真的很慢

所以我想知道有没有更有效的方法来序列化dom文档或处理大型xml文档

更新:

我使用计时器记录每个部件所需的时间,以下是序列化:

// serialize the updated DOM
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();

long t0 = timer.currentTimeMillis();
DOMSource source = new DOMSource(dom);
StreamResult result = new StreamResult(doc);
transformer.transform(source, result);
long t1 = timer.currentTimeMillis();

Reporter.log("Finished serializing " + doc.getAbsolutePath() + " in " + (((t1 - t0)) / 1000.0f) + " s.", true);
日志显示:

....
Finished serializing C:\Usrs\Adminstrator\Documents\Docs\InitialDocument_1.xml in 53 s.

你应该考虑使用StAX。DOM不适合这里。你可以在这里看到比较

您可以参考下面的URL获取示例代码


< P>你应该考虑使用StAX。DOM不适合这里。你可以在这里看到比较

您可以参考下面的URL获取示例代码


最快的方法是斯塔克斯。最简单的方法是JAXB。

最快的方法是StAX。最简单的方法是JAXB。

您尝试过使用SAX接口吗

如果您需要非常快速地处理非常大的xml文档,那么必须避免使用DOM结构。看看非dom解析器,如下所示:


您是否尝试过使用SAX接口

如果您需要非常快速地处理非常大的xml文档,那么必须避免使用DOM结构。看看非dom解析器,如下所示:


50秒来序列化90Kb是疯狂的。DOM很慢,但没有那么慢;出了点问题,我不知道是什么

然而,将90Kb描述为“大”是严重误导,这种错误描述可能影响了一些答案

你需要多快?我猜想XSLT等标准转换机制已经足够快了


另一个相关因素是,您需要对内容进行哪些更改?这在很大程度上取决于所需逻辑的复杂性。

50秒来序列化90Kb是疯狂的。DOM很慢,但没有那么慢;出了点问题,我不知道是什么

然而,将90Kb描述为“大”是严重误导,这种错误描述可能影响了一些答案

你需要多快?我猜想XSLT等标准转换机制已经足够快了


另一个相关因素是,您需要对内容进行哪些更改?很大程度上取决于所需逻辑的复杂程度。

多大是“大”?10公里?10万?几GB?大的有多大?10公里?10万?几GB?嗨@dkaustubh,谢谢你的回答!我使用了一个计时器来记录每个部分需要多长时间(例如,从xml到dom的转换、解析dom、序列化)。在一个90KB的文件上进行序列化大约需要50秒,这对我来说没有任何意义…我不知道序列化部分有什么问题…stax不太适合,它不构建对象模型,而且很难使用hi@dkaustubh,谢谢你的回答!我使用了一个计时器来记录每个部分需要多长时间(例如,从xml到dom的转换、解析dom、序列化)。在一个90KB的文件上序列化大约需要50秒,这对我来说没有任何意义…我不知道序列化部分出了什么问题…stax不太适合,它不构建对象模型,而且很难使用VTD xml实际上比stax快得多,它甚至不接近VTD xml实际上比stax快得多,它甚至不接近