Как использовать unread () в PushBackBufferedInputStream после того, как поток пуст? - PullRequest
0 голосов
/ 18 февраля 2010

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

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

Ответы [ 3 ]

1 голос
/ 18 февраля 2010

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

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

0 голосов
/ 18 февраля 2010

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

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

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

0 голосов
/ 18 февраля 2010

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

...