Java - Reader Class
Introduction
The Java Reader class is a abstract class for reading character streams.
Class declaration
Following is the declaration for Java.io.Reader class
public class Reader
extends Object
implements DataOutput, DataInput, Closeable
Field
Following are the fields for Java.io.Reader class
protected Object lock This is the object used to synchronize operations on this stream.
Class constructors
| Sr.No. | Constructor & Description |
|---|---|
| 1 |
protected Reader() This creates a new character-stream reader whose critical sections will synchronize on the reader itself. |
| 2 |
protected Reader(Object lock) This creates a new character-stream reader whose critical sections will synchronize on the given object. |
Class methods
| Sr.No. | Method & Description |
|---|---|
| 1 |
abstract 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. |
| 4 |
int read()
This method reads a single character. |
| 5 |
int read(char[] cbuf)
This method reads characters into an array. |
| 6 |
abstract int read(char[] cbuf, int off, int len)
This method reads characters into a portion of an array. |
| 7 |
int read(CharBuffer target)
This method attempts to read characters into the specified character buffer. |
| 8 |
boolean ready()
This method tells whether this stream is ready to be read. |
| 9 |
void reset()
This method resets the stream. |
| 10 |
long skip(long n)
This method skips characters. |
Methods inherited
This class inherits methods from the following classes
- Java.io.Object
Example - Using close() Manually with StringReader
The following example shows the usage of Reader close() method.
ReaderDemo.java
package com.tutorialspoint;
import java.io.IOException;
import java.io.StringReader;
public class ReaderDemo {
public static void main(String[] args) {
String data = "This is a sample string.";
StringReader reader = null;
try {
reader = new StringReader(data);
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
System.out.println("\nReader closed successfully.");
}
}
}
}
Output
Let us compile and run the above program, this will produce the following result
This is a sample string. Reader closed successfully.
Explanation
Opens a file sample.txt for reading.
Reads characters one by one.
close() is called in the finally block to ensure it's always executed.
Example - Mark and Reset within the Limit
The following example shows the usage of Reader mark(int readAheadLimit) method.
ReaderDemo.java
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
public class ReaderDemo {
public static void main(String[] args) {
String data = "ABCDEFG";
try (BufferedReader reader = new BufferedReader(new StringReader(data))) {
System.out.print((char) reader.read()); // A
reader.mark(3); // Mark after reading 'A'
System.out.print((char) reader.read()); // B
System.out.print((char) reader.read()); // C
reader.reset(); // Go back to after 'A'
System.out.print((char) reader.read()); // B (again)
System.out.print((char) reader.read()); // C (again)
System.out.print((char) reader.read()); // D
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output
Let us compile and run the above program, this will produce the following result
ABCBCD
Explanation
We mark the position after reading 'A'.
After reading 'B' and 'C', we reset() to the marked point.
We re-read 'B' and 'C', and then continue.
Example - Using BufferedReader (Supports Mark)
The following example shows the usage of Reader markSupported() method.
ReaderDemo.java
package com.tutorialspoint;
import java.io.BufferedReader;
import java.io.StringReader;
public class ReaderDemo {
public static void main(String[] args) {
String data = "Hello World";
BufferedReader reader = new BufferedReader(new StringReader(data));
System.out.println("markSupported(): " + reader.markSupported());
try {
reader.mark(5); // This is safe
System.out.println("Marked at start");
System.out.print((char) reader.read()); // H
System.out.print((char) reader.read()); // e
reader.reset(); // Resets to 'H'
System.out.print("\nAfter reset: ");
System.out.print((char) reader.read()); // H again
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
Let us compile and run the above program, this will produce the following result
markSupported(): true Marked at start He After reset: H
Explanation
BufferedReader supports mark() and reset(), so markSupported() returns true.
We use mark() safely and reset to re-read characters.