Java - Reader mark(int readAheadLimit) method



Description

The Java Reader mark(int readAheadLimit) method marks the present position in the stream. Subsequent calls to reset() will attempt to reposition the stream to this point.

mark(int readAheadLimit) method −

  • Marks the current position in the stream.

  • You can later reset back to this position using reset().

  • readAheadLimit is the maximum number of characters that can be read before the mark becomes invalid.

  • Works only if the reader supports marking (use reader.markSupported() to check).

Declaration

Following is the declaration for java.io.Reader.mark(int readAheadLimit) method.

public void mark(int readAheadLimit)

Parameters

readAheadLimit − Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail.

Return Value

This method does not return a value.

Exception

  • IOException − If the stream does not support mark(), or if some other I/O error occurs.

Example - Usage of Reader mark(int readAheadLimit) method

The following example shows the usage of Reader mark(int readAheadLimit) method.

ReaderDemo.java

package com.tutorialspoint;

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

public class ReaderDemo {
   public static void main(String[] args) {
   
      try {
         String s = "Hello World";

         // create a new StringReader
         Reader reader = new StringReader(s);

         // read the first five chars
         for (int i = 0; i < 5; i++) {
            char c = (char) reader.read();
            System.out.print( c);
         }

         // mark current position for maximum of 10 characters
         reader.mark(10);

         // read five more chars
         for (int i = 0; i < 6; i++) {
            char c = (char) reader.read();
            System.out.print( c);
         }

         // reset back to the marked position
         reader.reset();

         // change line
         System.out.println();

         // read six more chars
         for (int i = 0; i < 6; i++) {
            char c = (char) reader.read();
            System.out.print( c);
         }

         // close the stream
         reader.close();

      } catch (IOException ex) {
         ex.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result −

Hello World
 World

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 - Exceeding the Read-Ahead 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 = "1234567890";
      try (BufferedReader reader = new BufferedReader(new StringReader(data))) {
         reader.mark(3); // Mark at the start

         System.out.print((char) reader.read()); // 1
         System.out.print((char) reader.read()); // 2
         System.out.print((char) reader.read()); // 3

      } catch (IOException e) {
         System.out.println("\nException: " + e.getMessage());
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result−

123

Explanation

  • We marked with a limit of 3 characters.

  • Then we read 3 characters.

java_io_reader.htm
Advertisements