在编写列表时,如何防止JavaXMLEConder使用如此多的内存?
我在ArrayList boList中有可序列化的关系javabean BO,我想使用XMLEncoder或其他标准方法将其写入XML 使用:在编写列表时,如何防止JavaXMLEConder使用如此多的内存?,java,xml,xml-serialization,javabeans,Java,Xml,Xml Serialization,Javabeans,我在ArrayList boList中有可序列化的关系javabean BO,我想使用XMLEncoder或其他标准方法将其写入XML 使用: XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream( new FileOutputStream("C:/tmp/test.xml"))); encoder.writeObject(boList); encoder.close(); 我的内存用完了。但是,如果我这样做: for
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(
new FileOutputStream("C:/tmp/test.xml")));
encoder.writeObject(boList);
encoder.close();
我的内存用完了。但是,如果我这样做:
for(BO bo : boList)
{
encoder.writeObject(bo);
encoder.flush();
}
encoder.close();
它使用很少的内存就可以完美地运行。我知道flush将生成的xml写入文件,并释放引用的内存,这很有意义。我怀疑,在将boList写入xmlcoder时,它试图在写入内存不足的XML之前生成所有XML
我需要能够将boList写入XML,因为它是父BO中的一个字段,将被写入XML。我如何让它与列表一起工作,就像我在每个单独的对象上调用writeObject一样?是否有一种替代XMLEncoder的方法可以实现这一点,并且使用起来非常简单?这必须使用标准JRE/Java6功能来完成,而不使用第三方库。谢谢 经过大量研究和阅读XMLEncoder的实现代码后,我确定它确实在为每次调用writeObject编写输出之前在内存中构建了所有xml结构。。。。使用XMLEncoder似乎没有一种可行的方法来解决这个问题 我决定使用另一种第三方开源库。在本例中,XStream提供了与XMLEncoder完全相同的终端功能,但更健壮。它在生成xml时将生成的xml流式传输到目标,从而大大减少了内存占用 简而言之,我的答案是,对于大型对象图,如果不实际更改XMLEncoder的实现,就无法减少XMLEncoder的内存占用