Say, I have a class X which has a field value, that is,
class X implements Serializable {
private int value;
// ...
}
Further it has getters and setters not displayed here. This class is serialized.
At the deserialzation, end same class has value field and access specifier is public. Further, this class does not have getters and setters. So, my questions are:
- Does deserialization fail in case the access specifier of the field changes OR some or all of the methods go missing in the class at the deserialization end?
- What is the mechanism by which fields are assigned their values during deserialization?
Some good links The Java serialization algorithm revealed
Serialization happens using Using Reflection
Java Detects the changes to a class using the
private static final long serialVersionUIDThe default involves a hashcode. Serialization creates a single hashcode, of type long, from the following information:
The class name and modifiers
The names of any interfaces the class implements
Descriptions of all methods and constructors except private methods and constructors
Descriptions of all fields except private, static, and private transient
The default behavior for the serialization mechanism is a classic “better safe than sorry” strategy. The serialization mechanism uses the suid, which defaults to an extremely sensitive index, to tell when a class has changed. If so, the serialization mechanism refuses to create instances of the new class using data that was serialized with the old classes.