Yes, it is sometimes useful.
The JDK class PushbackReader
allows that.
But our MyPushbackReader
will not.
MyPushbackReader
works like this:
An instance variable, isPushBack
,
is true when there is a pushed-back character.
The next call to read()
then returns the pushed-back character rather than
a character from the input stream.
Our read()
returns -1
on end of file,
which it gets from the read()
method of BufferedReader
.
Recall that BufferedReader.read()
returns an int
that should be
typecast into a char.
import java.io.* ; class MyPushbackReader extends BufferedReader { private int pushBack = ' '; private boolean isPushBack = false; public MyPushbackReader(Reader in) { super( in ); } public int read() throws IOException { int chr; if ( isPushBack ) { isPushBack = false; chr = pushBack; return chr; } chr = super.read(); return chr; } public void unread( char c ) throws IOException { if ( isPushBack ) throw new IOException("Pushback buffer is full"); pushBack = (int)c; isPushBack = true; } }
The unread()
method pushes back one character
by saving it in pushBack
and setting isPushBack
to true.
If there already is a pushed-back character it throws
an IOException,
as does the unread()
method in the JDK class PushbackReader
.
What does the following statement from the read()
method do?
chr = super.read();