2016-07-29 5 views
0

Я пытаюсь настроить Aalto-xml (Woodstox) в среде Async, но у вас возникли проблемы с выяснением того, как это сделать правильно!Использование Aalto-xml для создания нового буфера для каждого XML

Мой поток:

  1. Предварительно выделить 'AsyncStreamReader'

    xmlInputFactory.createAsyncForByteArray();

  2. получающего поток XML из гнезда

  3. поток StreamReader с данными

    streamReader.getInputFeeder().feedInput(bytes, 0, bufSize);

  4. разбирает различные теги XML в цикле:

    while (streamReader.hasNext()) {...}

  5. XMLEvent.END_ELEMENT После последнего разбора -> Invoke:

    streamReader.getInputFeeder().endOfInput();

  6. После XMLEvent.END_DOCUMENT сделать:

    streamReader = xmlInputFactory.createAsyncForByteArray();

  7. AsyncXMLStreamReader.EVENT_INCOMPLETE -> Разрыв цикла и ожидание получения данных для подачи анализатора.

Я делаю это так, хотя я знаю, что это неправильно, потому что если я не позвоню: «endOfInput()», то при кормлении читателя с новым буфером он бросает исключение, как я не сделал с предыдущий xml.

Точка, которая меня не устраивает, заключается в том, что для получения END_DOCUMENT вы должны позвонить endOfInput(), который закрывает буфер, поэтому вы не можете его подавать с большим количеством входных данных, которые поступают из сокета ... Я застрял в цикле здесь!

Как исправить мой поток?

Вот Сущностью с кодом синтаксического анализатора: https://gist.github.com/shvalb/ca9cd526aea31ccf280adf289e0991d7

ответ

0

Дождитесь окончания потока; * InputStream.read() возвращает -1 до или * поток закрыт()) перед вызовом endOfInput()

Посмотрите этот example, он также необязательно прекращает подачу, если вход EVENT_INCOMPLETE не возвращается.

Смежные вопросы