gpt4 book ai didi

Java JAXB 多线程解码

转载 作者:行者123 更新时间:2023-11-30 08:12:45 26 4
gpt4 key购买 nike

我将创建一个类,它应该解码非常大的 xml 文件。

我已经实现了一般解码:

public XMLProcessor(XMLFile file) throws JAXBException, IOException, SAXException {

JAXBContext jc = JAXBContext.newInstance(Customers.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();

File xml = new File(file.getFile().getOriginalFilename());
file.getFile().transferTo(xml);
this.customers = (Customers) unmarshaller.unmarshal(xml);
}

它工作正常,但处理 100 万个客户 XML 花了一分多钟的时间。

我可以通过创建多个线程并同时解码 XML 文件的几个部分来提高性能吗?

我应该如何将 XML 文件分成几个部分?

您能为我展示一些适合我的案例的示例代码吗?

最佳答案

虽然我还不能提供完整的解决方案,但我想与您分享我目前针对类似问题实现的方法。我的 XML 文件结构如下:

<products>
<product id ="p1">
<variant id="v1"></variant>
<variant id="v2"></variant>
</product>
<product id ="p2">
<variant id="v3"></variant>
<variant id="v4"></variant>
</product>
</products>

产品和变体可能非常复杂,有很多属性、列表等。

我当前的方法是使用 SAX 提取单个产品实体的 XML 流,然后将其交给新的 Unmarshaller 线程(使用标准多线程操作、限制最大线程数等)。

但是,我仍然不能 100% 有信心 SAX 是否会产生过多的开销(这可能会消耗多线程的优势)。如果是这种情况,我将尝试直接读取 XML 流,对“”的打开/关闭标签使用react。这不符合 xml 标准,这是我最后的手段

关于Java JAXB 多线程解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30139302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com