- Serialization is the process of saving the objects loaded in the memory to corresponding streams.
- e.g Save the objects to a file system (Layman term save object to a file).
- Deserialization is the process of loading the saved data to corresponding objects.
- We have discussed about the serialization deserialization in java.
Impact of Static & transient data members on serialization in java:
1. Static data member:
- Static variables are not part of object.
- When we serialize the object, the static variable(s) are not be serialized.
2. Transient data member:
- Sometimes, we do not want serialize some data members.
- Then, we can mark those variables as transient variables.
- Transient data members are not be serialized.
- When, we deserialize objects, the transient variable(s) will have default values.
- e.g if integer is marked as transient, after deserialization it will initialized to 0.
Program:Impact of Static & transient data members in java
1. Person Class (or POJO class):
- Given an Person class, we would like to serialize Person object(s).
- Person class will contain data members like firstName, lastName, age & contact.
- We will mark lastName as static variable.
- We will mark contact as transient variable.
- Static variable(s) are not part of object.
- lastName will never be serialized.
- Transient variables are not be serialized.
- contact data member will not be serialized.
package org.learn;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
public String firstName;
public static String lastName = "Static member will not be serialzed";
public int age;
public transient String contact = "Trasient member will not be serialized";
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 + "]";
}
}
2. Serialize & Deserialize method:
- serialize method will serialize the person object
- lastName is static data member, hence lastName will not serialized.
- We will modify static variable (lastName) after person object is serialized.
- When, we deserialize the person object.
- Person Object will have modified value, which we have set after serialization.
- Hecne, static members are not serialized.
- Also, contact data member will not be serialized, as it is transient.
- When, we deserialize the contact data member, it will get null value.
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("Serialized the person object : " + person);
// Update the static variable to confirm that its not serialized
Person.lastName = "Setting last name after serialization";
}
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();
System.out.println("Deserialize the person object :" + person);
inputStream.close();
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
serialize();
deSerialize();
}
}
Output – Static & transient data members during serialization in java
Serialized the person object : [Mike harvey 34 001894536]
Deserialize the person object :[Mike Setting last name after serialization 34 null]