![]() |
VOOZH | about |
The serialization at runtime associates with each serializable class a version number called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. Geek, now you must be wondering why do we use SerialVersionUID?
It is because SerialVersionUID is used to ensure that during deserialization the same class (that was used during serialize process) is loaded. Consider ran the illustration given below to get a fairer understanding of Serialization & Deserialization.
Illustration:
Serialization at the time of serialization, with every object sender side JVM will save a Unique Identifier. JVM is responsible to generate that unique ID based on the corresponding .class file which is present in the sender system.
Deserialization at the time of deserialization, receiver side JVM will compare the unique ID associated with the Object with local class Unique ID i.e. JVM will also create a Unique ID based on the corresponding .class file which is present in the receiver system. If both unique ID matched then only deserialization will be performed. Otherwise, we will get Runtime Exception saying InvalidClassException. This unique Identifier is nothing but SerialVersionUID.
There are also certain problem associations depending on the default SerialVersionUID generated by JVM as listed below:
Implementation:
We can solve the above problem by configuring our own SerialVersionUID. We can configure our own SerialVersionUID for which we need 3 classes as follows:
Syntax:
private static final long SerialVersionUID=10l;
Example 1:
Example 2: Class for sender side which is going to Serialize an object
Example 3: Class for receiver side which is going to deserialize
Output:
👁 ImageWe can see the file which is xyz.txt where object is Serialize and also the output when we deserialize the Object.
Note: In the above program, if we perform any change to the Geeks .class file at the receiver end. We don't get any problem at the time of deserialization. In this case, sender and receiver are not required to maintain the same JVM versions.