Serialization and Deserialization in Java


Serialization in Java is the process of converting an object into a byte stream so that it can be saved to a file or transmitted over a network. Deserialization is the reverse process where the byte stream is converted back into a Java object. This tutorial explains how to serialize and deserialize objects with step-by-step examples.

Step 1: Creating a Serializable Class

To make a class serializable, it must implement the java.io.Serializable interface. Below is an example:

    import java.io.Serializable;
    
    public class Person implements Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + "}";
        }
    }
        

Step 2: Serializing an Object

Use the ObjectOutputStream class to serialize an object to a file. Below is an example:

    import java.io.FileOutputStream;
    import java.io.ObjectOutputStream;
    import java.io.IOException;
    
    public class SerializeExample {
        public static void main(String[] args) {
            Person person = new Person("John Doe", 30);
            try {
                FileOutputStream fileOut = new FileOutputStream("person.ser");
                ObjectOutputStream out = new ObjectOutputStream(fileOut);
                out.writeObject(person);
                out.close();
                fileOut.close();
                System.out.println("Object serialized and saved to person.ser");
            } catch (IOException e) {
                System.out.println("An error occurred: " + e.getMessage());
            }
        }
    }
        

Step 3: Deserializing an Object

Use the ObjectInputStream class to deserialize an object from a file. Below is an example:

    import java.io.FileInputStream;
    import java.io.ObjectInputStream;
    import java.io.IOException;
    
    public class DeserializeExample {
        public static void main(String[] args) {
            try {
                FileInputStream fileIn = new FileInputStream("person.ser");
                ObjectInputStream in = new ObjectInputStream(fileIn);
                Person person = (Person) in.readObject();
                in.close();
                fileIn.close();
                System.out.println("Object deserialized: " + person);
            } catch (IOException | ClassNotFoundException e) {
                System.out.println("An error occurred: " + e.getMessage());
            }
        }
    }
        

Step 4: Customizing Serialization

You can customize the serialization process by defining the writeObject and readObject methods in your class. Below is an example:

    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    
    public class Person implements Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        private void writeObject(ObjectOutputStream out) throws IOException {
            out.defaultWriteObject();
            out.writeUTF(name.toUpperCase()); // Example: Convert name to uppercase
        }
    
        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
            in.defaultReadObject();
            this.name = in.readUTF();
        }
    
        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + "}";
        }
    }
        

Summary

In this tutorial, you learned:

  • How to create a serializable class
  • How to serialize an object to a file
  • How to deserialize an object from a file
  • How to customize the serialization process

Serialization is a powerful mechanism for persisting and transferring objects in Java.





Advertisement