Что такое "Push-подход" и "Pull-подход" к анализу?

при подходе push parsing анализатор push генерирует синхронные события в виде документа проанализировано, и эти события могут быть обработаны приложением с помощью модели обработчика обратного вызова

Это текст, приведенный в книге Pro XML разработка С Java о саксофоне 2.0.

Что касается StAX, книга говорит:

при подходе pull события извлекаются из XML-документа под управлением приложение использование парсера.

Я хочу спросить, что означает выделенный текст ? Ответ, подходящий новичку, приветствуется:)

3 ответов


в принципе, толчок-это когда парсер говорит какому-то обработчику: "у меня есть foo, сделайте что-нибудь с ним."Тяга-это когда обработчик говорит парсеру:" дайте мне следующий foo."

Push:

if (myChar == '(')
    handler.handleOpenParen(); // push the open paren to the handler

Жми:

Token token = parser.next(); // pull the next token from the parser

Push Parsers - события генерируются API в виде функций обратного вызова, таких как startDocument (), endDocument() и находятся вне контроля программиста. Мы, как программист, могли бы обрабатывать события, но генерация событий находится вне контроля.

Тянуть Парсеры - события генерируются, когда мы вызываем некоторый API. Пример показан ниже. Таким образом, мы как программист можем решить, когда генерировать события.

   int eventType = xmlr.getEventType();
while(xmlr.hasNext()){
     eventType = xmlr.next();
     //Get all "Book" elements as XMLEvent object
     if(eventType == XMLStreamConstants.START_ELEMENT && 
         xmlr.getLocalName().equals("Book")){
        //get immutable XMLEvent
        StartElement event = getXMLEvent(xmlr).asStartElement();
        System.out.println("EVENT: " + event.toString());
     }
} 

, клиент получает только (тянет) XML-данные, когда он явно запрашивает его.

при синтаксическом анализе pull клиент управляет потоком приложения и при необходимости может вызывать методы на синтаксическом анализаторе. Напротив, при push-обработке синтаксический анализатор управляет потоком приложения, и клиент может принимать только вызовы от анализатора.


push parsing: именно там парсер подталкивает события синтаксического анализа к приложению, наиболее вероятно, используя методы обратного вызова. Приложение может обрабатывать асинхронно после вызова любых методов парсера, так что если парсер занимает время, приложение не застревает в этой точке. Как только синтаксический анализ будет завершен, синтаксический анализатор через событие обратного вызова запустит приложение, чтобы приложение могло продолжить результат анализа.

тянуть разбора: когда приложение вытащить данные вдоль, а не в ожидании событий синтаксического анализа. Приложение может тянуть данные по одному, в соответствии с его требованиями. как и в StAX, приложение вызывает метод next() итеративно, чтобы получить следующую конструкцию в XML.