scala.xml.pull.XMLEventReader не успевает за потоком - PullRequest
1 голос
/ 17 мая 2011

Я пытаюсь использовать scala.xml.pull.XMLEventReader примерно так:

private val in =
    new XMLEventReader(Source.fromInputStream(
        new BufferedInputStream(sock.getInputStream()), "utf-8")).buffered

Затем я перебираю поток XML с помощью:

while (in.hasNext) {
    in.next match { ... }
}

Проблема здесь в том, что xmleventreader блокирует «hasNext» и не оповещает о новых XML-тегах, которые, как я знаю, поступили (я отслеживал поток с помощью TCP Dump .. и могу видеть тег в конце, но до сих пор даже не уведомлен, предыдущий тег был закрыт).

Я пробовал это в scala 2.8.0, 2.8.1 и 2.9.0

Также пробуется без ".buffered" и без использования BufferedInputStream, но результаты были одинаковыми.

Есть ли надежда или XMLEventReader просто сломан?

1 Ответ

1 голос
/ 17 мая 2011

MarkupParser сломан. При закрытии тега он всегда получает следующий символ. Поскольку вы читаете из потока, он блокируется, пока не будет предоставлен такой символ или поток не будет закрыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...