- Given user defined object or POJO, we would like to serialize object in java.
- We will use Externalizable interface, so that class is marked for Serialization.
- Externalizable interface is sub interface of Serializable interface.
- We have discussed similar posts:
- Serialize user defined object using Serializable interface.
- Impact of inheritance on Serialization, when Base class is Serialization.
- Impact of inheritance on Serialization, when Concrete class is Serialization.
1. Serialization & Deserialization using Externalizable interface in java
The Externalizable interface has following methods.
public interface Externalizable extends java.io.Serializable {
void writeExternal(ObjectOutput out) throws IOException;
void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}
- We will discuss the serialization & deserialization of user defined object with the help of example.
- User defined object shall implements Externalizable interface.
- We will have a Person class, which we want to serialize using Externalizable interface.
2. Class hierarchy of Person class (implementing Externalizable interface)

3. POJO or User defined class (Person)
- We will mark lastName as static variable
- We will mark contact data member as transient variable.
- If we implements Externalizable interface, then we can serialize static and transient variables.
- Customize serialization using writeExternal method of Externalizable interface.
- Read serialized object using readExternal method of Externalizable interface.
- The Person class needs to have default constructor.
4. Person class or POJO implementing Externalizable interface.
package org.learn;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
public class Person implements Externalizable {
private static final long serialVersionUID = 1L;
public String firstName;
public static String lastName = "Not Set";
public int age;
public transient String contact;
public Person() {
}
public Person(String firstName, int age, String contact) {
this.firstName = firstName;
this.age = age;
this.contact = contact;
}
public String toString() {
return "[" + firstName + " " + lastName + " " + age + " " + contact + "]";
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(firstName);
out.writeObject(lastName);
out.writeInt(age);
out.writeObject(contact);
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
firstName = (String) in.readObject();
lastName = (String) in.readObject();
age = (int) in.readInt();
contact = (String) in.readObject();
}
}
5. Serialize and Deserialize methods of Person class
- serialize method will serialize the person object.
- We will serialize static variable in write
- Serialize static variable using writeExternal method in Person class.
- Person.lastName = “harvey”;
- Set before serialization
- We will serialize static variable in write
- deSerialize method will de-serialize the Person Object.
- We will get serialized properties of Person object.
- Static and non static variables will be deserialized.
- We will get serialized properties of Person object.
6. Program – Serialization & deserialization of user defined object in java.
package org.learn;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializeDeserialize {
public static void serialize() throws IOException {
Person person = new Person("Mike", 34, "001894536");
//Set static variable
Person.lastName = "harvey";
FileOutputStream output = new FileOutputStream(new File("savePerson.txt"));
ObjectOutputStream outputStream = new ObjectOutputStream(output);
outputStream.writeObject(person);
outputStream.flush();
outputStream.close();
System.out.println("1. Serialized the person object : ");
System.out.println(person);
System.out.println("LastName:"+Person.lastName);
}
public static void deSerialize() throws IOException, ClassNotFoundException {
FileInputStream inputStream = new FileInputStream(new File("savePerson.txt"));
ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
Person person = (Person) objectInputStream.readObject();
inputStream.close();
System.out.println("\n2. Deserialized person object : ");
System.out.println(person);
System.out.println("LastName:"+Person.lastName);
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
serialize();
deSerialize();
}
}
Download example – Serialization object in java externalizable interface
