Click here to watch in Youtube :
https://www.youtube.com/watch?v=USBG4oiFvuo&list=PLmCsXDGbJHdhyX_ZywkAJYigVJwRJmu3Z
Subscribe to Ram N Java for clean, beginner-friendly core Java tutorials and interview prep!
🔔 Subscribe to Ram N JavaIn Java, objects exist in heap memory as long as the JVM is running. But what happens when you need to store an object’s current state to a file, persist it into a database, or transfer it across the network to another system? This is where Java Serialization comes into play.
A class must implement the java.io.Serializable marker interface to become serializable. Because it contains no methods or variables, it simply marks the class as eligible for conversion to a byte stream.
The standard stream classes responsible for serialization and deserialization:
ObjectOutputStream.writeObject() writes the object state to an output stream.ObjectInputStream.readObject() reconstructs the object from an input stream.transient: Prevents specific instance fields from being serialized (restored to default values like null or 0).static: Belongs to the class level rather than the instance, meaning static variables are not part of the serialized state.![]() |
| Java Tutorial : Java IO (Java Serialization_V3) |
![]() |
| Java Tutorial : Java IO (Java Serialization_V3) |
![]() |
| Java Tutorial : Java IO (Java Serialization_V3) |
![]() |
| Java Tutorial : Java IO (Java Serialization_V3) |
Subscribe to Ram N Java for clean, beginner-friendly core Java tutorials and interview prep!
🔔 Subscribe to Ram N JavaIn object-oriented programming with Java, applications constantly create objects that reside in memory. However, when the program terminates, all those objects are lost. Java Serialization is the core mechanism that allows developers to save the state of an object into a portable byte stream, enabling long-term persistence and seamless data transfer across networks.
ObjectOutputStream.
ObjectInputStream.
java.io.Serializable, a marker interface that contains no methods or fields.
| Concept | Behavior |
|---|---|
transient Fields |
Excluded from serialization; restored to default values (e.g., null, 0) |
static Fields |
Belong to the class definition rather than the object instance; never serialized |
serialVersionUID |
Ensures class compatibility during deserialization across different JVM versions |
![]() |
| Java Tutorial : Java IO (Java Serialization_V2) |
![]() |
| Java Tutorial : Java IO (Java Serialization_V2) |
Subscribe to Ram N Java for clean, beginner-friendly core Java tutorials and interview prep!
🔔 Subscribe to Ram N JavaSerialization is one of the core foundational features of Java IO. It provides a standard, platform-independent mechanism for converting the state of an object into a byte stream. This byte stream can be written to a file, stored in a database, or transmitted across network connections, making it vital for enterprise applications and distributed systems.
The serialization architecture in Java revolves around two complementary processes:
ObjectOutputStream.writeObject().
ObjectInputStream.readObject().
Classes must explicitly opt in to serialization by implementing java.io.Serializable. Because it contains no methods or variables, it acts as a marker interface that instructs the JVM runtime that objects of this class are safe to serialize.
transient: Prevents sensitive or temporary fields from being serialized. These fields will be initialized to their default values (e.g., null, 0) upon deserialization.static: Belongs to the class rather than an object instance, meaning static variables are never saved into the serialized stream.
The serialVersionUID constant is used to verify that the sender and receiver of a serialized object have loaded classes that are compatible with respect to serialization.
| Component | Description |
|---|---|
Serializable |
Marker interface required for classes to be serializable |
ObjectOutputStream |
Writes object state to a byte stream via writeObject() |
ObjectInputStream |
Reconstructs objects from a byte stream via readObject() |
transient |
Omits fields from serialization |
![]() |
| Java Tutorial : Java IO (Java Serialization_V1) |
![]() |
| Java Tutorial : Java IO (Java Serialization_V1) |
![]() |
| Java Tutorial : Java IO (Marker Interface) |
![]() |
| Java Tutorial : Java IO (DataStreams) |
import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataOutputStreamDemo { public static void main(String[] args) throws Exception { DataOutputStreamDemo dataOutputStreamDemo = new DataOutputStreamDemo(); dataOutputStreamDemo.writePrimitiveData(); } public void writePrimitiveData() throws IOException { DataOutputStream dataOutputStream = null; FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream("data.txt"); dataOutputStream = new DataOutputStream(fileOutputStream); int[] intArray = { 100, 250, 440, 550, 900 }; for (int j : intArray) { dataOutputStream.writeInt(j); } System.out.println("Successfully written to \'data.txt\' file\n"); } finally { if (dataOutputStream != null) { /* * Closing a DataOutputStream will also * close the OutputStream instance to which * the DataOutputStream is writing. */ dataOutputStream.close(); } } } }
Successfully written to 'data.txt' file
data.txtimport java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; public class DataInputStreamDemo { public static void main(String[] args) throws Exception { DataInputStreamDemo dataInputStreamDemo = new DataInputStreamDemo(); dataInputStreamDemo.readPrimitiveData(); } public void readPrimitiveData() throws IOException { FileInputStream fileInputStream = null; DataInputStream dataInputStream = null; try { fileInputStream = new FileInputStream("data.txt"); dataInputStream = new DataInputStream(fileInputStream); while (dataInputStream.available() > 0) { int intValue = dataInputStream.readInt(); System.out.println(intValue); } } finally { if (dataInputStream != null) { /* * Closing a DataInputStream will also close * the InputStream instance from which the * DataInputStream is reading. */ dataInputStream.close(); } } } }
100 250 440 550 900
![]() |
| Java Tutorial : Java IO (DataOutputStream) |
![]() |
| Java Tutorial : Java IO (DataOutputStream) |
![]() |
| Java Tutorial : Java IO (DataOutputStream) |
![]() |
| Java Tutorial : Java IO (DataOutputStream) |
![]() |
| Java Tutorial : Java IO (DataOutputStream) |
import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataOutputStreamDemo { public static void main(String[] args) throws Exception { DataOutputStreamDemo dataOutputStreamDemo = new DataOutputStreamDemo(); dataOutputStreamDemo.writePrimitiveData(); } public void writePrimitiveData() throws IOException { DataOutputStream dataOutputStream = null; FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream("data.bin"); dataOutputStream = new DataOutputStream(fileOutputStream); dataOutputStream.writeInt(125); dataOutputStream.writeFloat(150.45F); dataOutputStream.writeLong(9090); dataOutputStream.writeBoolean(true); System.out.println("Successfully written primitive data's to \'data.bin\' file\n"); } finally { if (dataOutputStream != null) { /* * Closing a DataOutputStream will also * close the OutputStream instance to which * the DataOutputStream is writing. */ dataOutputStream.close(); } } } }Output
Successfully written primitive data's to 'data.bin' file
import java.io.DataInputStream; import java.io.FileInputStream; import java.io.IOException; public class DataInputStreamDemo { public static void main(String[] args) throws Exception { DataInputStreamDemo dataInputStreamDemo = new DataInputStreamDemo(); dataInputStreamDemo.readPrimitiveData(); } public void readPrimitiveData() throws IOException { FileInputStream fileInputStream = null; DataInputStream dataInputStream = null; try { fileInputStream = new FileInputStream("data.bin"); dataInputStream = new DataInputStream(fileInputStream); int intValue = dataInputStream.readInt(); float floatValue = dataInputStream.readFloat(); long longValue = dataInputStream.readLong(); boolean booleanValue = dataInputStream.readBoolean(); System.out.println("intValue = " + intValue); System.out.println("floatValue = " + floatValue); System.out.println("longValue = " + longValue); System.out.println("booleanValue = " + booleanValue); } finally { if (dataInputStream != null) { /* * Closing a DataInputStream will also close * the InputStream instance from which the * DataInputStream is reading. */ dataInputStream.close(); } } } } OutputRefer:intValue = 125 floatValue = 150.45 longValue = 9090 booleanValue = true