|
|
|
|
If you simply serialize out with no special handling, then, by default, ObjectOutputStream will store the fully qualified name of the class being serialized, plus a version number. This unique version number is computed for the class by applying the Secure Hash Algorithm (SHA) to the name of the class, its interfaces, fields, and methods. If any such changes are made to the class, the version number will change. This means that a class can become incompatible with its serialized versions. For example, I added an extra field (a phone number) and modified some methods in the Address class:
But when I try to serialize an older version back in, it gives me the following error: java.io.InvalidClassException: serialization.Address;
Local class not compatible: stream classdesc serialVersionUID=8364956740597978489
local class serialVersionUID=2153101615360274995
at java.io.ObjectStreamClass.setClass(ObjectStreamClass.java:242)
at java.io.ObjectInputStream.inputClassDescriptor(ObjectInputStream.java:735)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:225)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:933)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:344)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:225)
at java.util.Hashtable.readObject(Hashtable.java:499)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1121)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:344)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:474)
at java.io.ObjectInputStream.inputObject(ObjectInputStream.java:1122)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:344)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:225)
at serialization.SerializeInAddressBook.main(SerializeInAddressBook.java:19)
at symantec.tools.debug.MainThread.run(Agent.java:48)
|
| The page was last updated February 19, 2008 |