Java мониторинг прогресса синтаксического анализатора SAX

Я пишу синтаксический анализатор SAX в Java для парсинга XML-файла на 2.5 ГБ статей Википедии. Существует ли способ контролировать прогресс парсинга в Java?

12
задан Danijel 23 June 2010 в 08:21
поделиться

3 ответа

Используйте javax.swing.ProgressMonitorInputStream.

10
ответ дан 2 December 2019 в 06:25
поделиться

Предполагая, что вы знаете, сколько у вас статей, не можете ли вы просто вести счетчик в обработчике? Например,

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 цента

1
ответ дан 2 December 2019 в 06:25
поделиться

Вы можете получить оценку текущей строки/колонки в вашем файле, переопределив метод setDocumentLocator из org.xml.sax.helpers.DefaultHandler/BaseHandler. Этот метод вызывается с объектом, из которого при необходимости можно получить приближение к текущей строке/столбцу.

Edit: Насколько мне известно, не существует стандартного способа получения абсолютной позиции. Однако я уверен, что некоторые реализации SAX предлагают такую информацию.

2
ответ дан 2 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: