Java - BufferedReader markSupported() method



Description

The Java BufferedInputStream markSupported() method returns true if the stream supports mark() method.

The markSupported() method is used to check if the current reader supports the mark() and reset() methods. It returns true if marking is supported, otherwise false.

Declaration

Following is the declaration for java.io.Bufferedreader.marksupported() method.

public boolean markSupported()

Parameters

NA

Return Value

The method returns boolean value. Returns true if mark() is supported.

Exception

NA

Assumption

Assuming we have a text file example.txt, which has the following content. This file will be used as an input for our example programs −

ABCDE 

Example - Using markSupported() method

The following example shows the usage of Java BufferedReader markSupported() method.

BufferedReaderDemo.java

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;

public class BufferedReaderDemo {
   public static void main(String[] args) throws Exception {
      InputStream is = null; 
      InputStreamReader isr = null;
      BufferedReader br = null;

      try {
         // open input stream example.txt for reading purpose.
         is = new FileInputStream("example.txt");
         
         // create new input stream reader
         isr = new InputStreamReader(is);
         
         // create new buffered reader
         br = new BufferedReader(isr);
      
         boolean bool = false;
         
         // returns true if the stream type supports mark
         bool = br.markSupported();
         
         System.out.println("Buffered reader supports mark : "+bool);
         
      } catch(Exception e) {
         e.printStackTrace();
      } finally {
         // releases resources associated with the streams
         if(is!=null)
            is.close();
         if(isr!=null)
            isr.close();
         if(br!=null)
            br.close();
      }
   }
}

Output

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

Buffered reader supports mark : true

Example - Checking if mark() and reset() methods are Supported

The following example shows the usage of Java BufferedReader markSupported() method.

BufferedReaderDemo.java

package com.tutorialspoint;

import java.io.BufferedReader;
import java.io.IOException;

public class BufferedReaderDemo {
   public static void main(String[] args) {
      // Input string
      String input = "Hello, World!\nThis is a BufferedReader example.";

      // Create a BufferedReader
      try (BufferedReader reader = new BufferedReader(new StringReader(input))) {
         // Check if mark and reset are supported
         if (reader.markSupported()) {
            System.out.println("Mark and reset are supported by this BufferedReader.");

            // Use mark and reset as they are supported
            reader.mark(100); // Mark the position
            System.out.println("First line: " + reader.readLine());

            // Reset to the marked position
            reader.reset();
            System.out.println("After reset: " + reader.readLine());
         } else {
            System.out.println("Mark and reset are not supported by this BufferedReader.");
         }
      } catch (IOException e) {
         System.err.println("An error occurred: " + e.getMessage());
      }
   }
}

Output

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

Mark and reset are supported by this BufferedReader.
First line: Hello, World!
After reset: Hello, World!

Explanation

  • The markSupported() method is called to check if the BufferedReader supports marking.

  • If supported, the mark() and reset() methods are used to demonstrate how to revisit the marked position.

  • If not supported, an appropriate message is displayed.

Example - Demonstrating markSupported() with an Unsupported Reader

The following example shows the usage of Java BufferedReader markSupported() method.

BufferedReaderDemo.java

package com.tutorialspoint;

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

public class BufferedReaderDemo {
   public static void main(String[] args) {
      // Custom reader that does not support mark
      Reader unsupportedReader = new Reader() {
         @Override
         public int read(char[] cbuf, int off, int len) throws IOException {
            return -1; // Dummy implementation
         }

         @Override
         public void close() throws IOException {
            // Dummy implementation
         }
      };

      System.out.println(" unsupportedReader.markSupported() - " +  
         unsupportedReader.markSupported() );

      // Wrap the unsupported reader in a BufferedReader
      BufferedReader reader = new BufferedReader(unsupportedReader);

      // Check if mark and reset are supported
      if (reader.markSupported()) {
         System.out.println("Mark and reset are supported.");
      } else {
         System.out.println("Mark and reset are NOT supported.");
      }

      // Close the reader
      try {
         reader.close();
      } catch (IOException e) {
         System.err.println("Error while closing the reader: " + e.getMessage());
      }
   }
}

Output

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

unsupportedReader.markSupported() - false
Mark and reset are supported.

Explanation

  • A custom Reader is created that does not support marking (markSupported() will return false).

  • The custom reader is wrapped in a BufferedReader, which overrides the behavior to support marking.

  • The output of markSupported() depends on the behavior of the underlying reader or the wrapper.

Key Points

  • BufferedReader always supports mark() and reset(), so markSupported() returns true for all instances of BufferedReader.

  • Wrapping an unsupported reader with a BufferedReader enables marking, but markSupported() can still provide information about the original reader's capabilities if directly accessed.

All examples demonstrate how markSupported() can be used to verify marking support and ensure safe usage of mark() and reset().

java_io_bufferedreader.htm
Advertisements