Java - ByteArrayInputStream markSupported() method



Description

The Java ByteArrayInputStream markSupported() method is used to check whether the mark(int readAheadLimit) and reset() methods are supported by the stream. For ByteArrayInputStream, the method always returns true because mark() and reset() are supported by this stream.

Declaration

Following is the declaration for java.io.ByteArrayInputStream.markSupported() method −

public boolean markSupported()

Parameters

NA

Return Value

This method returns true for ByteArrayInputStream

Exception

NA

Example - Using ByteArrayInputStream markSupported() method

The following example shows the usage of Java ByteArrayInputStream markSupported() method. We've created a variable buf as byte[] and initialized with few bytes. We've created a ByteArrayInputStream reference and then initialized it with buf variable. Then we're checking if mark is supported using markSupported() method. We're reading first three bytes using read() method and then using mark() method, we've reset the mark current position and then bytes are read again. Then we've called the reset() method to reset the head to previously marked position and bytes are read again.

ByteArrayInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayInputStreamDemo {
   public static void main(String[] args) throws IOException {
      byte[] buf = {65, 66, 67, 68, 69};
      ByteArrayInputStream bais = null;
      
      try {
         // create new byte array input stream
         bais = new ByteArrayInputStream(buf);
		 
         // test support for mark() and reset() methods invocation
         boolean isMarkSupported = bais.markSupported();
         System.out.println("Is mark supported : "+isMarkSupported);
         
         // print bytes
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         
         System.out.println("Mark() invocation");

         // mark() invocation;
         bais.mark(0);
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         
         System.out.println("Reset() invocation");
         
         // reset() invocation
         bais.reset();
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         
      } catch(Exception e) {
         // if I/O error occurs
         e.printStackTrace();
      } finally {
         if(bais!=null)
            bais.close();
      }   
   }
}

Output

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

Is mark supported : true
Byte read 65
Byte read 66
Byte read 67
Mark() invocation
Byte read 68
Byte read 69
Reset() invocation
Byte read 68
Byte read 69

Example - Using ByteArrayInputStream markSupported() method

The following example shows the usage of Java ByteArrayInputStream markSupported() method. We've created a variable buf as byte[] and initialized with few bytes. We've created a ByteArrayInputStream reference and then initialized it with buf variable. Then we're checking if mark is supported using markSupported() method. We're reading first two bytes using read() method and then using mark() method, we've reset the mark to current position and then bytes are read again. Then we've called the reset() method to reset the head to previously marked position and bytes are read again.

ByteArrayInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayInputStreamDemo {
   public static void main(String[] args) throws IOException {
      byte[] buf = {65, 66, 67, 68, 69};
      ByteArrayInputStream bais = null;
      
      try {
         // create new byte array input stream
         bais = new ByteArrayInputStream(buf);
		 
         // test support for mark() and reset() methods invocation
         boolean isMarkSupported = bais.markSupported();
         System.out.println("Is mark supported : "+isMarkSupported);
         
         // print bytes
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         
         System.out.println("Mark() invocation");

         // mark() invocation;
         bais.mark(0);
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         
         System.out.println("Reset() invocation");
         
         // reset() invocation
         bais.reset();
         System.out.println("Byte read "+ bais.read());
         System.out.println("Byte read "+ bais.read());
         
      } catch(Exception e) {
         // if I/O error occurs
         e.printStackTrace();
      } finally {
         if(bais!=null)
            bais.close();
      }   
   }
}

Output

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

Is mark supported : true
Byte read 65
Byte read 66
Mark() invocation
Byte read 67
Byte read 68
Byte read 69
Reset() invocation
Byte read 67
Byte read 68

Example - Using ByteArrayInputStream markSupported() method

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

ByteArrayInputStreamDemo.java

package com.tutorialspoint;

import java.io.ByteArrayInputStream;

public class ByteArrayInputStreamDemo {
   public static void main(String[] args) {
      // Create a byte array
      byte[] data = {72, 101, 108, 108, 111}; // Corresponds to 'H', 'e', 'l', 'l', 'o'

      // Create a ByteArrayInputStream
      ByteArrayInputStream inputStream = new ByteArrayInputStream(data);

      // Check if mark and reset are supported
      if (inputStream.markSupported()) {
         System.out.println("mark() and reset() are supported by ByteArrayInputStream.");

         // Mark the current position
         inputStream.mark(0);
         System.out.println("Marked the current position after reading:");

         // Read and print the first byte
         System.out.println((char) inputStream.read()); // Read 'H'

         // Reset the stream to the marked position
         inputStream.reset();
         System.out.println("Stream reset to the marked position.");

         // Read and print the first byte again
         System.out.println((char) inputStream.read()); // Read 'H' again
      } else {
         System.out.println("mark() and reset() are not supported by this stream.");
      }
   }
}

Output

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

mark() and reset() are supported by ByteArrayInputStream.
Marked the current position after reading:
H
Stream reset to the marked position.
H

Explanation

  • Initialization− A ByteArrayInputStream is created using a byte array containing the ASCII values for the characters 'H', 'e', 'l', 'l', 'o'.

  • Checking Mark Support− The markSupported() method is called to check whether the stream supports the mark() and reset() methods. Since ByteArrayInputStream always supports these methods, it returns true.

  • Mark and Reset− If markSupported() returns true, the program marks the current position in the stream using mark(), reads a byte, and then uses reset() to return to the marked position. The byte is read again to demonstrate the functionality.

  • Output− The program shows that mark() and reset() are supported and performs the operations successfully.

Key Points

  • The markSupported() method is useful for checking if a stream supports mark() and reset() before using them.

  • For ByteArrayInputStream, markSupported() method always returns true because these operations are inherently supported.

  • Using mark() and reset() allows re-reading data from a previously marked position.

java_bytearrayinputstream.htm
Advertisements