Как использовать unread() в PushBackBufferedInputStream после того, как поток пуст?

Создаю Lexical Analyzer на Java, и я использую PushbackInputStream, потому что мне нужно иметь возможность отодвинуть то, что я прочитал, на случай, если это не то, что я хотел. Но всякий раз, когда поток пуст и read() возвращает -1. Это не позволяет мне использовать непрочитанные ().

РЕДАКТИРОВАТЬ: в настоящее время я использую обычный InputStream, читаю все сразу, помещаю его в стек и использую стек в качестве потока, чтобы я мог использовать в нем элементы pop() и push().

3 ответа

Я думаю, что ваша проблема заключается в том, что вы используете жесткую стороннюю обратную передачу.

Вы, вероятно, должны использовать java.io.PushbackInputStream или же java.io.PushbackReader которые имеют более четко определенный API, и не делают особых вещей, таких как "очистка" буфера.

Но всякий раз, когда поток пуст и read() возвращает -1. Это не позволяет мне использовать непрочитанные ().

Пожалуйста, уточните "не позволяет мне использовать непрочитанные ()". Из быстрого взгляда на исходный код все должно работать хорошо.

Также любопытно узнать, почему вы отталкиваетесь от EOF.

Если вы можете обойтись с одним жетоном упреждения и отталкивания, странно почтенный StreamTokenizer класс может быть достаточно. Он используется в этой простой реализации парсера рекурсивного спуска.

Другие вопросы по тегам