Java - DataInputStream read() method



Description

The Java DataInputStream read(byte[] b) method reads number of bytes from the contained input stream and allocate them in the buffer b. The method is blocked until input data is available, an exception is thrown or end of file is detected.

Declaration

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

public final int read(byte[] b)

Parameters

b − The buffer array into which the data is read from this stream.

Return Value

Total number of bytes in the stream, else -1 if the stream has reached the end.

Exception

  • IOException − If an I/O error occurs, the first byte cannot be read, or close() is invoked before this method.

  • NullPointerException − If b is null.

Example 1

The following example shows the usage of Java DataInputStream read(byte[] b) method. We've created InputStream and DataInputStream references and then initialized them with FileInputStream and DataInputStream objects. In order to initialize DataInputStream(), we requires FileInputStream object. Once objects are created, we're checking if inputStream has content using available() method. Then a bytearray of available bytes is created which is then used in DataInputStream read() method, which populates the bytearray. Then this bytearray is iterated and printed.

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class DataInputStreamDemo {
   public static void main(String[] args) throws IOException {
      InputStream is = null;
      DataInputStream dis = null;
      
      try {
         // create input stream from file input stream
         is = new FileInputStream("F:\\test.txt");
         
         // create data input stream
         dis = new DataInputStream(is);
         
         // count the available bytes form the input stream
         int count = is.available();
         
         // create buffer
         byte[] bs = new byte[count];
         
         // read data into buffer
         dis.read(bs);
         
         // for each byte in the buffer
         for (byte b:bs) {
         
            // convert byte into character
            char c = (char)b;
            
            // print the character
            System.out.print(c+" ");
         }
         
      } catch(Exception e) {
         // if any I/O error occurs
         e.printStackTrace();
      } finally {
         // releases any associated system files with this stream
         if(is!=null)
            is.close();
         if(dis!=null)
            dis.close();
      }   
   }
}

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

ABCDEFGH

Output

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

A B C D E F G H 

Example 2

The following example shows the usage of Java DataInputStream read(byte[] b) method. We've created InputStream and DataInputStream references and then initialized them with FileInputStream and DataInputStream objects. In order to initialize DataInputStream(), we requires FileInputStream object. In this example, we're using a non-existent file and see if read() method is throwing exception.

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class DataInputStreamDemo {
   public static void main(String[] args) throws IOException {
      InputStream is = null;
      DataInputStream dis = null;
      
      try {
         // create input stream from file input stream
         is = new FileInputStream("F:\\test1.txt");
         
         // create data input stream
         dis = new DataInputStream(is);
         
         // count the available bytes form the input stream
         int count = is.available();
         
         // create buffer
         byte[] bs = new byte[count];
         
         // read data into buffer
         dis.read(bs);
         
         // for each byte in the buffer
         for (byte b:bs) {
         
            // convert byte into character
            char c = (char)b;
            
            // print the character
            System.out.print(c+" ");
         }
         
      } catch(Exception e) {
         // if any I/O error occurs
         e.printStackTrace();
      } finally {
         // releases any associated system files with this stream
         if(is!=null)
            is.close();
         if(dis!=null)
            dis.close();
      }   
   }
}

Assuming we are not having a text file F:/test1.txt. This file will be used as an input for our example program −

Output

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

java.io.FileNotFoundException: F:\test1.txt (The system cannot find the file specified)
	at java.base/java.io.FileInputStream.open0(Native Method)
	at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
	at java.base/java.io.FileInputStream.<init&t;(FileInputStream.java:157)
	at java.base/java.io.FileInputStream.<init&t;(FileInputStream.java:112)
	at DataInputStreamDemo.main(DataInputStreamDemo.java:13)

Example 3

The following example shows the usage of Java DataInputStream read(byte[] b) method. We've created InputStream and DataInputStream references and then initialized them with FileInputStream and DataInputStream objects. In order to initialize DataInputStream(), we requires FileInputStream object. In this example, we're using an empty file and see if read() method is throwing exception or able to read an empty file successfully.

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class DataInputStreamDemo {
   public static void main(String[] args) throws IOException {
      InputStream is = null;
      DataInputStream dis = null;
      
      try {
         // create input stream from file input stream
         is = new FileInputStream("F:\\test.txt");
         
         // create data input stream
         dis = new DataInputStream(is);
         
         // count the available bytes form the input stream
         int count = is.available();
         
         // create buffer
         byte[] bs = new byte[count];
         
         // read data into buffer
         dis.read(bs);
         
         // for each byte in the buffer
         for (byte b:bs) {
         
            // convert byte into character
            char c = (char)b;
            
            // print the character
            System.out.print(c+" ");
         }
         
      } catch(Exception e) {
         // if any I/O error occurs
         e.printStackTrace();
      } finally {
         // releases any associated system files with this stream
         if(is!=null)
            is.close();
         if(dis!=null)
            dis.close();
      }   
   }
}

Assuming we have a text file F:/test.txt, which has no content. This file will be used as an input for our example program −


Output

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


java_files_io.htm
Advertisements