gpt4 book ai didi

java - 在 Java 中使用多线程解析 XML

转载 作者:行者123 更新时间:2023-12-01 16:58:33 30 4
gpt4 key购买 nike

我正在使用 JAXB 在 java 中读取大约 4 GB 的大型 XML,我有一个带有 SSD、RAM 和多个 CPU 核心的良好系统。我想使用多个线程读取该 XML 文件。我已经研究过但尚未找到任何解决方案。

我在想,如果我可以使用多个线程读取 XML 并发送字节 block 通过 XML 解析器进行解析,那就太好了,但想知道是否已经有实现的解决方案。

我的代码片段是

public void parseXML() throws Exception{

try(InputStream is = new BufferedInputStream(new FileInputStream(xmlFile),XML_READ_BUFFER)){
//try(InputStream is = new ByteArrayInputStream(removeAnd.getBytes(StandardCharsets.UTF_16))){
XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLStreamReader sr = xmlif.createXMLStreamReader(is);

JAXBContext ctx = JAXBContext.newInstance(XwaysImage.class);
Unmarshaller unmar = ctx.createUnmarshaller();

int c=0;
while (sr.hasNext()){

while(this.pause.get())Thread.sleep(100);
if(this.cancel.get()) break;

int eventType = sr.next();
if(eventType == XMLStreamConstants.START_ELEMENT){
if("ImageFile".equals(sr.getName().getLocalPart())){
XwaysImage xim = unmar.unmarshal(sr,XwaysImage.class).getValue();
//TODO code here.
}
}
}
sr.close();
is.close();
}catch(Exception e){
log.error("",e);
}
}

最佳答案

由于这不是 DOM 风格的解析器,因此从磁盘读取 XML 文件的速度很快,尤其是从 SSD 读取。所以不要认为多线程阅读会有帮助。

但是检索数据的多线程处理可以提高整体性能,因此而不是“使用多个线程读取 XML 并发送字节 block 进行解析”尝试在单线程中读取,但并行处理。

关于java - 在 Java 中使用多线程解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61550238/

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