JAXB可以递增Marshall一个对象吗?

时间:2010-04-08 19:16:44

标签: jaxb marshalling

我有一个相当简单但可能很大的序列化结构。基本上,XML的结构将是:

<simple_wrapper>
   <main_object_type>
     <sub_objects>
   </main_object_type>
     ... main_object_type repeats up to 5,000 times
</simple_wrapper>

main_object_type可能包含大量数据。在我的第一个3,500记录提取中,我必须为JVM提供比它应该需要的更多内存。

所以,我想在每个(或一堆)main_object_type之后写出磁盘。

我知道设置Marshaller.JAXB_FRAGMENT会允许它碎片,但我会松开外部xml文档标记和<simple_wrapper>

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

以下情况如何?

JAXBContext jaxbContext= JAXBContext.newInstance(MainObjectType.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

OutputStreamWriter writer = new OutputStreamWriter(System.out);

// Manually open the root element
writer.write("<simple_wrapper>");

// Marshal the objects out individually
marshaller.marshal(mainObjectType1, writer);
marshaller.marshal(mainObjectType2, writer);
marshaller.marshal(mainObjectType3, writer);
marshaller.marshal(mainObjectType4, writer);
...

// Manually close the root element
writer.write("</simple_wrapper>");
writer.close();

这假设你在MainObjectType上有一个@XmlRootElement

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class MainObjectType {
    ...
}

答案 1 :(得分:0)

您可以将对象编组为SAX或StAX流。