Я пишу синтаксический анализатор SAX в Java для парсинга XML-файла на 2.5 ГБ статей Википедии. Существует ли способ контролировать прогресс парсинга в Java?
Предполагая, что вы знаете, сколько у вас статей, не можете ли вы просто вести счетчик в обработчике? Например,
public void startElement (String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if(qName.equals("article")){
counter++
}
...
}
(я не знаю, разбираете ли вы "статью", это просто пример)
Если вы не знаете количество статей заранее, вам нужно сначала посчитать их. Затем вы можете вывести статус nb tags read/total nb of tags
, скажем, каждые 100 тегов (counter % 100 == 0
).
Или даже поручить другому потоку следить за ходом выполнения. В этом случае вы, возможно, захотите синхронизировать доступ к счетчику, но это не обязательно, учитывая, что он не должен быть очень точным.
Мои 2 цента
Вы можете получить оценку текущей строки/колонки в вашем файле, переопределив метод setDocumentLocator
из org.xml.sax.helpers.DefaultHandler/BaseHandler
. Этот метод вызывается с объектом, из которого при необходимости можно получить приближение к текущей строке/столбцу.
Edit: Насколько мне известно, не существует стандартного способа получения абсолютной позиции. Однако я уверен, что некоторые реализации SAX предлагают такую информацию.