Java - PushbackReader class
Introduction
The Java PushbackReader class is a character-stream reader that allows characters to be pushed back into the stream.
Class declaration
Following is the declaration for Java.io.PushbackReader class
public class PushbackReader extends FilterReader
Field
Following are the fields for Java.io.PushbackReader class
protected Reader in This is the character-input stream.
protected Object lock This is the object used to synchronize operations on this stream.
Class constructors
| Sr.No. | Constructor & Description |
|---|---|
| 1 |
PushbackReader(Reader in) This creates a new pushback reader with a one-character pushback buffer. |
| 2 |
PushbackReader(Reader in, int size) This creates a new pushback reader with a pushback buffer of the given size. |
Class methods
| Sr.No. | Method & Description |
|---|---|
| 1 |
void close()
This method closes the stream and releases any system resources associated with it. |
| 2 |
void mark(int readAheadLimit)
This method marks the present position in the stream. |
| 3 |
boolean markSupported()
This method tells whether this stream supports the mark() operation, which it does not. |
| 4 |
int read()
This method reads a single character. |
| 5 |
int read(char[] cbuf, int off, int len)
This method reads characters into a portion of an array. |
| 6 |
boolean ready()
This method tells whether this stream is ready to be read. |
| 7 |
void reset()
This method resets the stream. |
| 8 |
long skip(long n)
This method skips characters. |
| 9 |
void unread(char[] cbuf)
This method pushes back an array of characters by copying it to the front of the pushback buffer. |
| 10 |
void unread(char[] cbuf, int off, int len)
This method pushes back a portion of an array of characters by copying it to the front of the pushback buffer. |
| 11 |
void unread(int c)
This method pushes back a single character by copying it to the front of the pushback buffer. |
Methods inherited
This class inherits methods from the following classes
- Java.io.Reader
- Java.io.Object
Example - Properly closing a PushbackReader
The following example shows the usage of PushbackReader close() method.
PushbackReaderDemo.java
package com.tutorialspoint;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.StringReader;
public class PushbackReaderDemo {
public static void main(String[] args) {
try (PushbackReader reader = new PushbackReader(new StringReader("Hello, Java!"))) {
int ch = reader.read();
System.out.println("First character read: " + (char) ch); // Output: H
// Push the character back
reader.unread(ch);
// Read it again
System.out.println("After unread: " + (char) reader.read()); // Output: H
// The reader will be automatically closed here due to try-with-resources
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output
Let us compile and run the above program, this will produce the following result
First character read: H After unread: H
Explanation
Uses try-with-resources to ensure close() is automatically called at the end.
Proper resource handling without explicitly calling close().
Example - Directly calling mark() on PushbackReader
The following example shows the usage of PushbackReader markSupported() method.
PushbackReaderDemo.java
package com.tutorialspoint;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.StringReader;
public class PushbackReaderDemo {
public static void main(String[] args) {
try (PushbackReader reader = new PushbackReader(new StringReader("Hello, world!"))) {
System.out.println("markSupported: " + reader.markSupported()); // false
reader.mark(10); // This line will throw IOException
} catch (IOException e) {
System.out.println("Exception caught: " + e.getMessage());
}
}
}
Output
Let us compile and run the above program, this will produce the following result
markSupported: false Exception caught: mark/reset not supported
Example - Attempting Mark Without Checking markSupported()
The following example shows the usage of PushbackReader markSupported() method.
PushbackReaderDemo.java
package com.tutorialspoint;
import java.io.IOException;
import java.io.PushbackReader;
import java.io.StringReader;
public class PushbackReaderDemo {
public static void main(String[] args) {
try (PushbackReader reader = new PushbackReader(new StringReader("World"))) {
System.out.println("markSupported: " + reader.markSupported()); // false
// Attempting to mark anyway will throw IOException
reader.mark(5);
} catch (IOException e) {
System.out.println("Exception occurred: " + e.getMessage());
}
}
}
Output
Let us compile and run the above program, this will produce the following result
markSupported: false Exception occurred: mark/reset not supported
Explanation
Shows how skipping markSupported() leads to an exception.
Demonstrates the importance of checking before calling mark().