CONTENTS | PREV | NEXT | Java Object Serialization Specification |
TheObjectStreamClass
provides information about classes that are saved in a Serialization stream. The descriptor provides the fully-qualified name of the class and its serialization version UID. ASerialVersionUID
identifies the unique original class version for which this class is capable of writing streams and from which it can read.package java.io; public class ObjectStreamClass { public static ObjectStreamClass lookup(Class cl); public String getName(); public Class forClass(); public ObjectStreamField[] getFields(); public long getSerialVersionUID(); public String toString(); }Thelookup
method returns theObjectStreamClass
descriptor for the specified class in the virtual machine. If the class has definedserialVersionUID
it is retrieved from the class. If theserialVersionUID
is not defined by the class, it is computed from the definition of the class in the virtual machine. If the specified class is not serializable or externalizable, null is returned.The
getName
method returns the fully-qualified name of the class. The class name is saved in the stream and is used when the class must be loaded.The
forClass
method returns theClass
in the local virtual machine if one was found byObjectInputStream.resolveClass
method. Otherwise, it returns null.The
getFields
method returns an array ofObjectStreamField
objects that represent the serializable fields of this class.The
getSerialVersionUID
method returns theserialVersionUID
of this class. Refer to Section 4.4, "Stream Unique Identifiers." If not specified by the class, the value returned is a hash computed from the class's name, interfaces, methods, and fields using the Secure Hash Algorithm (SHA) as defined by the National Institute of Standards.The
toString
method returns a printable representation of the class descriptor including the name of the class and theserialVersionUID
.When an
ObjectStreamClass
instance is written to the stream, it writes the class name andserialVersionUID
, flags, and the number of fields. Depending on the class, additional information may be written:
- For non-serializable classes, the number of fields is always zero. Neither the serializable nor the externalizable flag bits are set.
- For serializable classes, the serializable flag is set, the number of fields counts the number of serializable fields and is followed by a descriptor for each serializable field. The descriptors are written in canonical order. The descriptors for primitive typed fields are written first sorted by field name followed by descriptors for the object typed fields sorted by field name. The names are sorted using
String.compareTo
. The protocol describes the format.- For externalizable classes, flags includes the externalizable flag, and the number of fields is always zero.