Open In App

Object Graph in Java Serialization

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Most of you must be aware with the Serialization involving single object but have you ever thought what if the object has reference to other objects too. Will it be serialized? Will reference objects will be serialized?
Answer to these queries is yes, you don’t have to explicitly serialize reference objects. Let’s find out how this can be achieved.

What is Object Graph?
An Object Graph is the set of objects which will be serialized automatically, if the object which contains reference to them is serialized.
In other words, we can say that when we serialize any object and if it contains any other object reference then JVM serializes the object and as well as its object references.
Lets make it more clear with the help of a simple example.




// Java program to demonstrate how serializing 
// an object serializes other reference objects.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
  
// Class Serial1 contains reference to object 
// of class Serial2. 
class Serial1 implements Serializable {
     Serial2 s2 = new Serial2(); 
}
  
// Class Serial2 contains reference to object 
// of class Serial3. 
class Serial2 implements Serializable {
     Serial3 s3 = new Serial3(); 
}
  
// A reference of this class is present in Serial2
class Serial3 implements Serializable {
     int i = 10;
     int j = 20;
}
  
class DemoSerialize {
  
     public static void main(String args[]) throws Exception {
  
     // Creating object of class Serial1
     Serial1 s1 = new Serial1();
  
     // Serializing object of class Serial1
     // Saving object in file
     FileOutputStream fos = new FileOutputStream("abc.ser");
     ObjectOutputStream oos = new ObjectOutputStream(fos);
  
     // Method for serializing object of class Serial1
     oos.writeObject(s1);
  
     // Close streams once serialization is done
     fos.close();
     oos.close();
  
     // De-Serializing object of class Serial1
  
     // Reading object from file
     FileInputStream fis = new FileInputStream("abc.ser");
     ObjectInputStream ois = new ObjectInputStream(fis);
  
     // Method for de-serializing object of class Serial1     
     Serial1 serobject = (Serial1) ois.readObject();
  
     // Close streams once de-serialization is done
     fis.close();
     ois.close();
  
     // Printing values of i and j after Serialization
     System.out.println("Value of i after Serialization"
                               " is " + serobject.s2.s3.i);
     System.out.println("Value of j after Serialization"
                                " is "+serobject.s2.s3.j);
  }
}


Output:

Value of i after Serialization is 10
Value of j after Serialization is 20

Note: In object graph every object should be serializable. If at-least one object is not serializable then we will get runtime execution saying NonSerializableExecution.



Last Updated : 05 Sep, 2017
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads