Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
在编写列表时,如何防止JavaXMLEConder使用如此多的内存?_Java_Xml_Xml Serialization_Javabeans - Fatal编程技术网

在编写列表时,如何防止JavaXMLEConder使用如此多的内存?

在编写列表时,如何防止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

我在ArrayList boList中有可序列化的关系javabean BO,我想使用XMLEncoder或其他标准方法将其写入XML

使用:

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的内存占用