gpt4 book ai didi

java - 如何跟踪 StAX 中大文件的解析进度?

转载 作者:数据小太阳 更新时间:2023-10-29 03:01:19 24 4
gpt4 key购买 nike

我正在使用 StAX API 处理大型 (1TB) XML 文件。假设我们有一个处理某些元素的循环:

XMLInputFactory fac = XMLInputFactory.newInstance();
XMLStreamReader reader = fac.createXMLStreamReader(new FileReader(inputFile));
while (true) {
if (reader.nextTag() == XMLStreamConstants.START_ELEMENT){
// handle contents
}
}

如何在大型 XML 文件中跟踪总体进度?从读取器获取偏移量适用于较小的文件:

int offset = reader.getLocation().getCharacterOffset();

但作为一个整数偏移量,它可能只适用于最大 2GB 的文件...

最佳答案

一个简单的 FilterReader 应该可以工作。

class ProgressCounter extends FilterReader {
long progress = 0;

@Override
public long skip(long n) throws IOException {
progress += n;
return super.skip(n);
}

@Override
public int read(char[] cbuf, int off, int len) throws IOException {
int red = super.read(cbuf, off, len);
progress += red;
return red;
}

@Override
public int read() throws IOException {
int red = super.read();
progress += red;
return red;
}

public ProgressCounter(Reader in) {
super(in);
}

public long getProgress () {
return progress;
}
}

关于java - 如何跟踪 StAX 中大文件的解析进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34724494/

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