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: LotusJavaPrince
Code 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
.