Java 在JAXB中,我可以创建一个解组器实例并使用它多次解组xml节点或文件吗?

Java 在JAXB中,我可以创建一个解组器实例并使用它多次解组xml节点或文件吗?,java,xml,jaxb,sax,Java,Xml,Jaxb,Sax,我使用SAX解析一个很大的xml文件,这个文件很大,有很多重复的节点。并使用JAXB将解析和重复的dom节点映射到javabeans以实现持久性 这是我的代码片段。我使用JAXB的部分解组示例代码,它在每次启动节点解析时创建解组器对象我可以重复使用它进行一次完整的xml解析,还是缓存它进行多次xml解析? 只要您的JAXBContext不变,就可以重用解组器 另见。它包含一个示例,仅当上下文(对象的包不在上下文路径上)发生更改时,才会对多个XML文件重用相同的解组器,您需要从不同的上下文创建一个

我使用SAX解析一个很大的xml文件,这个文件很大,有很多重复的节点。并使用JAXB将解析和重复的dom节点映射到javabeans以实现持久性

这是我的代码片段。我使用JAXB的
部分解组
示例代码,它在每次启动节点解析时创建解组器对象我可以重复使用它进行一次完整的xml解析,还是缓存它进行多次xml解析?


只要您的JAXBContext不变,就可以重用解组器


另见。它包含一个示例,仅当上下文(对象的包不在上下文路径上)发生更改时,才会对多个XML文件重用相同的解组器,您需要从不同的上下文创建一个新的解组器。

还应注意,所创建的解组器不是线程安全的,如果由多个线程访问,则应包装在ThreadLocal中。@moxn@Chunkz如何重用从
解组器
获得的
解组器
类的javadoc说它可以作为ContentHandler重用。。。但我猜它本身也不是线程安全的。
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
    ...

    if (namespaceURI.equals("") && localName.equals( “product” )) {
        Unmarshaller unmarshaller = null;
        try {
            //I want to reuse it, not create it in each startElement method
            unmarshaller = jaxbContext.createUnmarshaller();
        } catch (JAXBException e) {
            throw new SAXException(e);
        }
    ...