| CONTENTS | PREV | NEXT | Java Object Serialization Specification |
Objects implementingjava.io.Externalizablemust implement thereadExternalmethod to restore the entire state of the object. It must coordinate with its superclasses to restore their state. All of the methods ofObjectInputare available to restore the object's primitive typed fields and object fields.public void readExternal(ObjectInput stream) throws IOException;
Note - ThereadExternalmethod is public, and it raises the risk of a client being able to overwrite an existing object from a stream. The class may add its own checks to insure that this is only called when appropriate.
A new stream protocol version has been introduced in JDKTM 1.2 to correct a problem withExternalizableobjects. The old definition ofExternalizableobjects required the local virtual machine to find areadExternalmethod to be able to properly read anExternalizableobject from the stream. The new format adds enough information to the stream protocol so serialization can skip anExternalizableobject when the localreadExternalmethod is not available. Due to class evolution rules, serialization must be able to skip anExternalizableobject in the input stream if there is not a mapping for the object using the local classes.An additional benefit of the new
Externalizablestream format is the exception EOFException is thrown if areadExternalmethod attempts to read beyond the end of anExternalizableobject. Also, serialization is able to skip by any External data that is not read by areadExternalmethod.Due to the format change, JDKTM 1.1.6 and earlier releases are not able to read the new format. StreamCorruptedException is thrown when JDKTM 1.1.6 or earlier attempts to read an
Externalizableobject from a stream written inPROTOCOL_VERSION_2. Compatibility issues are discussed in more detail in Section 6.3, "Stream Protocol Versions."