DataInputStream

DataInputStream allows an application to read Java primitive data types (like int, float, char, etc.) from an underlying input stream in a machine-independent way. It’s commonly used with FileInputStream, ByteArrayInputStream, or any stream that provides raw bytes.

Commonly Used Constructors and Methods

Simple Program – Reading Primitives from File

LotusJavaPrince stores his profile info using DataOutputStream. Now, Mahesh wants to read it using DataInputStream.

import java.io.*;

public class SimpleDataInputStreamExample {
    public static void main(String[] args) {
        // First write data for demonstration
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("user.dat"))) {
            dos.writeInt(101);
            dos.writeDouble(89.65);
            dos.writeUTF("LotusJavaPrince");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Now read using DataInputStream
        try (DataInputStream dis = new DataInputStream(new FileInputStream("user.dat"))) {
            int id = dis.readInt();
            double score = dis.readDouble();
            String name = dis.readUTF();

            System.out.println("ID: " + id);
            System.out.println("Score: " + score);
            System.out.println("Name: " + name);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output

ID: 101
Score: 89.65
Name: LotusJavaPrinceCode language: HTTP (http)

Problem Statement:

Mahesh has a file students.dat that contains multiple student records. Each student has:

  • Roll No (int)
  • Name (UTF)
  • Marks (float)

He needs to read all student data using DataInputStream.

import java.io.*;

public class StudentReader {
    public static void main(String[] args) {
        // First, write sample student data
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("students.dat"))) {
            dos.writeInt(1);
            dos.writeUTF("Mahesh");
            dos.writeFloat(87.5f);

            dos.writeInt(2);
            dos.writeUTF("LotusJavaPrince");
            dos.writeFloat(93.2f);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Now read all student records
        try (DataInputStream dis = new DataInputStream(new FileInputStream("students.dat"))) {
            while (dis.available() > 0) {
                int rollNo = dis.readInt();
                String name = dis.readUTF();
                float marks = dis.readFloat();

                System.out.println("Roll No: " + rollNo);
                System.out.println("Name   : " + name);
                System.out.println("Marks  : " + marks);
                System.out.println("----------------------");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output:

Roll No: 1
Name   : Mahesh
Marks  : 87.5
----------------------
Roll No: 2
Name   : LotusJavaPrince
Marks  : 93.2
----------------------Code language: CSS (css)

DataInputStream is ideal for reading structured binary data.

  • Works well with DataOutputStream for a reliable write-read pair.
  • Ensures machine-independent reading of Java primitive types.
  • Always used with another InputStream, like FileInputStream.
Scroll to Top