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.

Advertisements