CONTENTS | PREV | NEXT | Java Object Serialization Specification |
A basic structure is needed to represent objects in a stream. Each attribute of the object needs to be represented: its classes, its fields, and data written and later read by class-specific methods. The representation of objects in the stream can be described with a grammar. There are special representations for null objects, new objects, classes, arrays, strings, and back references to any object already in the stream. Each object written to the stream is assigned a handle that is used to refer back to the object. Handles are assigned sequentially starting from 0x7E0000. The handles restart at 0x7E0000 when the stream is reset.A class object is represented by:
AnObjectStreamClass
object is represented by:
Strings are represented by their UTF encoding. Note, the current specification and implementation of the modified UTF restricts the total length of the encoded string to 65535 characters.The Stream Unique Identifier (SUID) of compatible classes. A flag indicating if the class had writeObject
/readObject
methods.The number of serializable fields. The array of fields of the class that are serialized by the default mechanism. For arrays and object fields, the type of the field is included as a string. Optional block-data records or objects written by the annotateClass
method.The ObjectStreamClass
of its supertype (null if the superclass is not serializable).
New objects in the stream are represented by:
All primitive data written by classes is buffered and wrapped in block-data records whether the data is written to the stream within a
- The serializable fields. See Section 1.5, "Defining Serializable Fields for a Class."
- If the class has
writeObject
/readObject
methods, there may be optional objects and/or block-data records of primitive types written by thewriteObject
method followed by anendBlockData
code.
writeObject
method or written directly to the stream from outside a writeObject
method. This data may only be read by the corresponding readObject
methods or directly from the stream. Objects written by writeObject
terminate any previous block-data record and are written as regular objects, or null or back references as appropriate. The block-data records allow error recovery to discard any optional data. When called from within a class, the stream can discard any data or objects until the endBlockData
.