ObjectInputStream is used to deserialize objects—that is, to read objects previously written to a stream using ObjectOutputStream. It reconstructs objects, arrays, and primitive data types from an input stream.
Commonly Used Constructors and Methods


Simple Program – Reading an Object from File
Mahesh wants to read a serialized Employee object from a file named employee.ser that was written by ObjectOutputStream.
import java.io.*;
class Employee implements Serializable {
int id;
String name;
Employee(int id, String name) {
this.id = id;
this.name = name;
}
}
public class SimpleObjectInputStreamExample {
public static void main(String[] args) {
// First, write the object to file (for demo purposes)
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("employee.ser"))) {
Employee e = new Employee(101, "LotusJavaPrince");
oos.writeObject(e);
} catch (IOException e) {
e.printStackTrace();
}
// Now, read the object using ObjectInputStream
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("employee.ser"))) {
Employee emp = (Employee) ois.readObject();
System.out.println("ID : " + emp.id);
System.out.println("Name : " + emp.name);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}Output:
ID : 101
Name : LotusJavaPrince
Problem Statement:
LotusJavaPrince, a banking software developer, stores multiple customer account objects (BankAccount) in a file using ObjectOutputStream. Now Mahesh needs to read all objects from the file using ObjectInputStream for auditing.
Each account has:
- Account Number (int)
- Account Holder Name (String)
- Balance (double)
import java.io.*;
import java.util.*;
class BankAccount implements Serializable {
int accNo;
String accHolder;
double balance;
BankAccount(int accNo, String accHolder, double balance) {
this.accNo = accNo;
this.accHolder = accHolder;
this.balance = balance;
}
void display() {
System.out.println("Account No : " + accNo);
System.out.println("Holder Name : " + accHolder);
System.out.println("Balance : " + balance);
System.out.println("-----------------------------");
}
}
public class BankAccountReader {
public static void main(String[] args) {
// Write multiple accounts (simulate previous storage)
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("accounts.ser"))) {
oos.writeObject(new BankAccount(1001, "Mahesh", 5000.0));
oos.writeObject(new BankAccount(1002, "LotusJavaPrince", 12000.75));
oos.writeObject(new BankAccount(1003, "Kiran", 8700.50));
} catch (IOException e) {
e.printStackTrace();
}
// Read all objects
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("accounts.ser"))) {
while (true) {
try {
BankAccount acc = (BankAccount) ois.readObject();
acc.display();
} catch (EOFException eof) {
break; // End of file reached
}
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Output:
Account No : 1001
Holder Name : Mahesh
Balance : 5000.0
-----------------------------
Account No : 1002
Holder Name : LotusJavaPrince
Balance : 12000.75
-----------------------------
Account No : 1003
Holder Name : Kiran
Balance : 8700.5
-----------------------------Code language: CSS (css)
ObjectInputStream is essential for reading serialized objects from a stream.
- It works closely with
ObjectOutputStreamto persist object states. - The objects being read must implement
Serializable. - It simplifies reading complex object structures with just one method call.
