Java - FilterInputStream read(byte[] b) method



Description

The Java FilterInputStream read(byte[] b) method reads up to b.length of data from this filter input stream into an array of bytes. This method block until input data is available.

Key Points

  • Reads up to b.length bytes into the byte array.

  • Returns the number of bytes actually read.

  • Returns -1 when EOF (End of File) is reached.

Declaration

Following is the declaration for java.io.FilterInputStream.read(byte[] b) method −

public int read(byte[] b)

Parameters

b − The destination buffer.

Return Value

The method returns the total number of bytes read into the buffer, or -1 if there is no more data to read.

Exception

IOException − If an I/O error occurs

Example - Usage of FilterInputStream read(byte[] b) method

The following example shows the usage of Java FilterInputStream read(byte[] b) method.

FilterInputStreamDemo.java

package com.tutorialspoint;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FilterInputStreamDemo {
   public static void main(String[] args) throws Exception {
      InputStream is = null; 
      FilterInputStream fis = null;
      int i = 0;
      char c;
      byte[] buffer = new byte[6];
      
      try {
         // create input streams
         is = new FileInputStream("test.txt");
         fis = new BufferedInputStream(is);
         
         // returns number of bytes read to buffer
         i = fis.read(buffer);
         
         // prints
         System.out.println("Number of bytes read: "+i);
         
         // for each byte in buffer
         for(byte b:buffer) {
         
            // converts byte to character
            c = (char)b;
            
            // prints
            System.out.println("Character read: "+c);
         }
         
      } catch(IOException e) {
         // if any I/O error occurs
         e.printStackTrace();
      } finally {
         // releases any system resources associated with the stream
         if(is!=null)
            is.close();
         if(fis!=null)
            fis.close();
      }
   }
}

Output(assuming test.txt contains ABCDEF)

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

Number of bytes read: 6
Character read: A
Character read: B
Character read: C
Character read: D
Character read: E
Character read: F

Example - Reading Multiple Bytes Using BufferedInputStream

The following example shows the usage of Java FilterInputStream read(byte[] b) method.

FilterInputStreamDemo.java

package com.tutorialspoint;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;

public class FilterInputStreamDemo {
   public static void main(String[] args) {
      try (FilterInputStream fis = new BufferedInputStream(new FileInputStream("example.txt"))) {
         byte[] buffer = new byte[10]; // Buffer to hold 10 bytes
         int bytesRead = fis.read(buffer); // Read into buffer

         if (bytesRead != -1) {
            System.out.println("Bytes read: " + bytesRead);
            System.out.println("Data: " + new String(buffer, 0, bytesRead)); // Convert to string
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(assuming example.txt contains HelloMicroservices)

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

Bytes read: 10
Data: HelloMicro

Explanation

  • Uses BufferedInputStream (subclass of FilterInputStream).

  • Reads up to 10 bytes into a byte array.

  • Converts the read bytes into a string and prints them.

Example - Reading a File in Chunks Using PushbackInputStream

The following example shows the usage of Java FilterInputStream read(byte[] b) method.

FilterInputStreamDemo.java

package com.tutorialspoint;

import java.io.FileInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.PushbackInputStream;

public class FilterInputStreamDemo {
   public static void main(String[] args) {
      try (FilterInputStream fis = new PushbackInputStream(new FileInputStream("example.txt"))) {
         byte[] buffer = new byte[5]; // Buffer for 5 bytes

         int bytesRead;
         while ((bytesRead = fis.read(buffer)) != -1) { // Read in chunks
            System.out.print(new String(buffer, 0, bytesRead)); // Print read data
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(assuming example.txt contains Microservices)

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

Microservices

Explanation

  • Uses PushbackInputStream (a FilterInputStream subclass).

  • Reads the file in chunks of 5 bytes at a time.

  • Continues reading until EOF (-1) is reached.

java_io_filterinputstream.htm
Advertisements