Я реализую программу чтения синтаксиса как побочное выполнение домашнего задания и читаю XML-файл по одному символу за раз. Моя цель - взять код, с которым я прошел лабораторное задание, и улучшить структуру и дизайн.
У меня есть SyntaxReader
, который наследуется от PushbackReader
, который имеет некоторые дополнительные методы, такие как readAndExpect(char c)
, trimWhitespace()
и readUntilChar(char c)
. Затем у меня есть XMLSyntaxReader
, который наследуется от SyntaxReader
и добавляет такие функции, как readAttribute()
и readNode()
(последний рекурсивен для детей в дереве ...).
Я просто взял рабочий код из моего лабораторного задания и вставил его в соответствующие места в этом подходе. Однако, когда я пытаюсь прочитать первого ребенка, я получаю IOException: Pushback buffer overflow
, который я не могу понять.
Это начало моего файла XML:
<Biosfar namn="Liv">ar allt som fortplantar sig
<Rike namn="Vaxter"> etc...
Я отлаживал и смотрел, как считыватели синтаксиса успешно читали до <R
в начале дочернего тега. В этот момент XMLSyntaxReader
подтверждает, что это дочерний тег, не читает два последних символа (R
и <
в указанном порядке) и вызывает readNode()
для анализа дочернего узла. Исключение возникает, когда я пытаюсь прочитать <
.
В отладчике я также проверил, что приватная переменная pos
PushbackReader
действительно установлена на 0
, но я не могу понять, почему. Я проанализировал полную строку текста - почему эти символы не учитываются?
Я бы опубликовал свой код, но он довольно длинный и работал так же, прежде чем я не уверен, что моя точная реализация актуальна. Если это так, укажите куда-нибудь, где я могу загрузить фрагменты, и я поделюсь всем кодом.