java xml 保存数据_用Java创建和保存大型XML

我正在研究一个java应用程序,它的工作是创建和保存XML(大型).我得到的样本是300 MB XML文件.

该应用程序旨在从数据库中收集批量数据并以XML格式保存.该应用程序由于其大量的IO和内存使用量而被设计为处理MAX 3这样的并行请求.

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

我需要你的意见:

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

2)将它保存到文件系统的最佳和最有效的内存方式是什么? – 我正在考虑将当前的编写器更改为bufferedWriter,并在物理写入磁盘之前将其保存到内存中. – 增加它会有任何副作用吗?

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

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

解决方法:

我有一个类似的问题.服务器在XML文件中使用JDOM编写数据.多年来,这些数据越来越大,服务器越来越慢,内存使用量也越来越大.原因如下:

服务器在大哈希表和列表中累积数据.在作业结束时,他在内存中创建了带有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,xml,file-io,java-ee,xml-serialization

来源: https://codeday.me/bug/20190723/1514537.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值