gpt4 book ai didi

java - 在 Java 中创建和保存大型 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:17:56 24 4
gpt4 key购买 nike

我正在开发一个 Java 应用程序,它的工作是创建和保存 XML(大尺寸)。我得到的样本是 300 MB 的 XML 文件。

该应用旨在从数据库中收集大量数据并将其保存为 XML 格式。该应用程序因其大量的 IO 和内存使用而设计为并行处理 MAX 3 此类请求。

现在的要求是让它并行处理最多 50 个这样的请求。当前应用程序使用 XMLbean 创建 XML,然后将其保存到文件系统。该应用程序在 weblogic 服务器上作为 web 服务公开(它在 64 位操作系统和 Java 最大堆大小 id 4 GB 上)。

我需要你的意见:

1) 是否有一个 XML API 可以与 XSD 一起使用,并且可以用来创建 200-200 MB 的大型 XML 且开销最小? XMLbean 对我们来说工作得很好,但是有什么东西可以更好地处理它吗?

2) 将其保存到文件系统的最佳且内存效率最高的方法是什么? - 我正在考虑将当前写入器更改为 bufferedWriter 并让它在物理写入磁盘之前将 1024 字节保存到内存中。 - 增加它会有任何副作用吗?

3) 如果技术选择和服务器等没有限制 - 什么是理想的解决方案!!!

编辑 1# 数据库访问速度很快(大约占总时间的 5%)。 XML 的创建很慢(需要 80% 的时间)。节省 15%(但我看到我可以做很多改进,所以我并不担心)。 - 谢谢路易斯。

最佳答案

我遇到了类似的问题。服务器正在使用 JDOM 在 XML 文件中写入数据。多年来,这些数据越来越大,服务器越来越慢,使用的内存也越来越大。原因如下:

服务器在大哈希表和列表中积累数据。在作业结束时,他在内存中创建了带有 JDOM 的 XML 文档,然后将其写入磁盘。

我更改了 XML 编写以使用带有 XMLStreamWriter 的流方法唯一的问题是,编写的 xml 文件不是很漂亮。这可以通过 IndentingXMLStreamWriter 来解决。

一个代码示例是:

FileOutputStream fileOutputStream = new FileOutputStream(outXmlFile);
XMLStreamWriter defaultWriter = factory.createXMLStreamWriter(fileOutputStream, encoding);
IndentingXMLStreamWriter writer = new IndentingXMLStreamWriter(defaultWriter);
writer.setIndentStep(" ");
try
{
writer.writeStartDocument(encoding, "1.0");

if (stylesheet != null)
{
writer.writeProcessingInstruction("xml-stylesheet", "type='text/xsl' href='" + stylesheet + "'");
writer.writeCharacters("\n");
}


writer.writeStartElement(TAG_ROOT);
writer.writeAttribute(TAG_OBJECT_TYPE, rootObject.getClass().getSimpleName());

...

writer.writeEndElement();
writer.writeEndDocument();
}
finally
{
writer.flush();
writer.close();
fileOutputStream.close();
}

关于java - 在 Java 中创建和保存大型 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com