Java PushbackReader и EOF - PullRequest
       19

Java PushbackReader и EOF

2 голосов
/ 12 февраля 2011

Я пишу парсер на Java и пытаюсь использовать Java PushbackReader. Моему парсеру, возможно, придется вернуться назад, если он угадал неправильно, но как только читатель достигнет EOF, это не удастся.

Допустим, я анализирую указанную строку и ищу закрывающие кавычки. Если какой-либо из моих плагинов парсера не может полностью завершиться, они пытаются оставить читателя в исходном состоянии и передать его следующему плагину. IE: я обычно помещаю символы обратно в буфер и позволяю следующему элементу попытаться проанализировать буфер.

К сожалению, если я «прочитаю» весь путь до последнего символа ... и затем прочитаю EOF, PushbackReader не позволит мне что-либо толкнуть обратно на него. Следовательно, мой анализ не может быть завершен, так как эти символы потеряны!

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

РЕДАКТИРОВАТЬ: кроме того, когда я читаю последний символ (тот, который был непосредственно перед EOF), я не могу «прочитать» этот символ. Есть ли стандартный обходной путь для этого - если не считать создание моей собственной реализации стека или буфера?

1 Ответ

4 голосов
/ 12 февраля 2011

Будьте внимательны, никогда не читайте маркер EOF, буфер внутри PushbackReader имеет тип char [], поэтому целое число -1 будет преобразовано в char 0xFFFF, который будет следующим символом, возвращаемым из метода read. Например, при разборе строки в кавычках всегда включайте проверку на -1 в дополнение к завершающему кавычке и обрабатывайте это как случай сбоя, например, выбрасывая IOException.

...