DataInputStream in Java – Java DataInputStream class

Views

286

DataInputStream in Java

Java DataInputStream is a class that we use to read primitive data type values. We can use this stream along with other input streams like FileInputStream to read the data. Since it reads data as numbers instead of bytes, we call it as DataInputStream. It contains only a single constructor that accepts an InputStream as a parameter.

DataInputStream di = new DataInputStream(InputStream in);

Methods of Java DataInputStream

Below are the methods that the DataInputStream class supports for write and other operations.

MethodsDescriptionint available()Returns the estimated number of remaining bytes available to readvoid close()Closes the input streamvoid mark(int readLimit)Marks the current position in the input streamboolean markSupported()Checks if the input stream supports mark() and reset() methodsint read()Reads the next byte of data in the input streamint read(byte[] b)Reads an array of bytes of data from the input streamint read(byte[] b, int off, int len)Reads len bytes of data from the input stream starting from the offset positionboolean readBoolean()Reads the boolean value from the streambyte readByte()Reads the next byte of data from the input streamchar readChar()Reads the next char of data from the input streamdouble readDouble()Reads the next double data from the input streamfloat readFloat()Reads the next float data from the input streamvoid readFully(byte[] b)Reads all bytes of data from the input stream and stores in the buffer array bvoid readFully(byte[] b, int off, int len)Reads len bytes of data from the input stream starting from the offset into the byte buffer arrayint readInt()Reads the next integer data from the input streamString readLine()Reads a line of string from the input streamlong readLong()Reads a long data from the input streambyte[] readNBytes(int len)Reads the specific length of bytes from the input stream and stores into the bufferint readNBytes(byte[] b, int off, int len)Reads len number of bytes from the input stream from the offset position and stores in buffer array bshort readShort()Reads a short data from the input streamint readUnsignedByte()Reads the next unsigned bytes of data from the input streamint readUnsignedShort()Reads the next unsigned short data from the input streamString readUFT()Reads the unicode form of data from the input streamlong skip(long n)Skips and discards n number of bytes to read from the input streamint skipBytes(int n)Skips and discards the specific number of bytes during the read operation

Example

The below example uses the read() method of the DataInputStream class to read the data from the input file. We can check the available number of bytes to read using the available() method.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.DataInputStream;

public class DataInputStreamDemo {

  public static void main(String[] args) throws IOException {
    FileInputStream fi = new FileInputStream("InputFile.txt");
    DataInputStream di = new DataInputStream(fi);
    
    System.out.println("Available number of bytes to read: " + di.available());
    int a;
    while((a=di.read()) != -1)
      System.out.print((char)a);

  }

}
Available number of bytes to read: 37
This is an example of DataInputStream

Example: DatatInputStream different read methods

The below example demonstrates the various read methods to read data from the file using the DataInputStream class.

The readUFT() method is for reading the Unicode format data, readInt() method for  integer value, readChar() for character data, readBoolean() for boolean value, readDouble() for double data, readFloat() for float value and readLong() for long value.

There are corresponding write methods in the DataOutputStream class to write these values which we will see in detail in the next tutorial.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.DataOutputStream;

public class DataInputStreamDemo {

  public static void main(String[] args) throws IOException {
    FileInputStream fi = new FileInputStream("OutputFile.txt");
    DataInputStream di = new DataInputStream(fi);
    
    FileOutputStream fo = new FileOutputStream("OutputFile.txt");
    DataOutputStream dos = new DataOutputStream(fo);
    
    dos.writeUTF("DataInputStream");
    dos.writeInt(25);
    dos.writeChar('d');
    dos.writeBoolean(false);
    dos.writeDouble(233.34);
    dos.writeFloat(555.55f);
    dos.writeLong(8888888);
    
    
    System.out.println("Available number of bytes to read: " + di.available());

    System.out.println("Read UFT: " + di.readUTF());
    System.out.println("Read int: " + di.readInt());
    System.out.println("Read char: " + di.readChar());
    System.out.println("Read boolean: " + di.readBoolean());
    System.out.println("Read double: " + di.readDouble());
    System.out.println("Read float: " + di.readFloat());
    System.out.println("Read Long: " + di.readLong());
    
    
    di.close();
    fi.close();
    dos.close();
    fo.close();
  }

}
Available number of bytes to read: 44
Read UFT: DataInputStream
Read int: 25
Read char: d
Read boolean: false
Read double: 233.34
Read float: 555.55
Read Long: 8888888

Example: Read the specific length of data using DataInputStream

We can also read the specific length of data using the DataInputStream class in Java. The below example shows how to read the text of length 8 from the input file. We are allocating only 12 bytes and hence the remaining 4 bytes are filled with *.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.DataInputStream;

public class DataInputStreamDemo {

  public static void main(String[] args) throws IOException {
    FileInputStream fi = new FileInputStream("InputFile.txt");
    DataInputStream di = new DataInputStream(fi);
    byte[] b = new byte[12];
    int a = di.read(b, 0, 8);
    
    for(byte by : b) {
      char ch = (char)by;
      if(by == 0)
        ch = '*';
      System.out.print(ch);
    }
    
    di.close();
    fi.close();

  }

}
This is ****

Example: DataInputStream skip() method

The below example demonstrates how to use the skip() method that skips or discards specific characters during the read operation. Here, we are discarding the first 4 characters and hence reads only from the 5th character.

import java.io.*;

public class SkipDISDemo {

  public static void main(String[] args) throws IOException {
    FileInputStream fi;
    try {
      fi = new FileInputStream("InputFile.txt");
      DataInputStream di = new DataInputStream(fi);
      
      di.skip(4);
      int a = 0;
      while((a=di.read()) != -1)
        System.out.print((char)a);
      
      di.close();
      fi.close();
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    }
    

  }

}
is an example of DataInputStream

 

Reference