CONTENTS | PREV | NEXT | Java Object Serialization Specification |
Each versioned class must identify the original class version for which it is capable of writing streams and from which it can read. For example, a versioned class must declare:static final long SerialVersionUID = 3487495895819393L;The stream-unique identifier is a 64-bit hash of the class name, interface class names, methods, and fields. The value must be declared in all versions of a class except the first. It may be declared in the original class but is not required. The value is fixed for all compatible classes. If the SUID is not declared for a class, the value defaults to the hash for that class.Serializable
classes do not need to anticipate versioning; however,Externalizable
classes do. The initial version of anExternalizable
class must output a stream data format that is extensible in the future. The initial version of the methodreadExternal
has to be able to read the output format of all future versions of the methodwriteExternal
.The
serialVersionUID
is computed using the signature of a stream of bytes that reflect the class definition. The National Institute of Standards and Technology (NIST) Secure Hash Algorithm (SHA-1) is used to compute a signature for the stream. The first two 32-bit quantities are used to form a 64-bit hash. Ajava.lang.DataOutputStream
is used to convert primitive data types to a sequence of bytes. The values input to the stream are defined by the Javatm Virtual Machine (VM) specification for classes. The sequence of items in the stream is as follows:
<clinit>
, in UTF encoding.
()V
, in UTF encoding.
<init>
, in UTF encoding.