我有一个相当简单但可能很大的序列化结构。基本上,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>
。
有什么建议吗?
答案 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流。