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
DataOutputStreamfor a reliable write-read pair. - Ensures machine-independent reading of Java primitive types.
- Always used with another InputStream, like
FileInputStream.
