CONTENTS | PREV | NEXT | Java Object Serialization Specification |
Objects implementingjava.io.Externalizable
must implement thereadExternal
method to restore the entire state of the object. It must coordinate with its superclasses to restore their state. All of the methods ofObjectInput
are available to restore the object's primitive typed fields and object fields.public void readExternal(ObjectInput stream) throws IOException;
Note - ThereadExternal
method 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 withExternalizable
objects. The old definition ofExternalizable
objects required the local virtual machine to find areadExternal
method to be able to properly read anExternalizable
object from the stream. The new format adds enough information to the stream protocol so serialization can skip anExternalizable
object when the localreadExternal
method is not available. Due to class evolution rules, serialization must be able to skip anExternalizable
object in the input stream if there is not a mapping for the object using the local classes.An additional benefit of the new
Externalizable
stream format is the exception EOFException is thrown if areadExternal
method attempts to read beyond the end of anExternalizable
object. Also, serialization is able to skip by any External data that is not read by areadExternal
method.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
Externalizable
object from a stream written inPROTOCOL_VERSION_2
. Compatibility issues are discussed in more detail in Section 6.3, "Stream Protocol Versions."