Interface Externalizable
- All Superinterfaces:
Serializable
- All Known Implementing Classes:
DataFlavor
Serializable class that fully implements its own protocol
for reading and writing to a serialization stream.
Only the identity of the class of an Externalizable instance is
written in the serialization stream and it is the responsibility
of the class to save and restore the contents of its instances.
The writeExternal and readExternal methods give the
class complete control over the format and contents of the stream
for an object and its supertypes. These methods must explicitly
coordinate with the supertype to save its state. These methods supersede
customized implementations of writeObject and readObject
methods.
Object Serialization uses the Serializable and Externalizable
interfaces. Object persistence mechanisms can use them as well. Each
object to be stored is tested for the Externalizable interface. If
the object supports Externalizable, the writeExternal method
is called. If the object does not support Externalizable and does
implement Serializable, the object is saved using
ObjectOutputStream.
When an Externalizable object is reconstructed, an instance is
created using the public no-arg constructor, then the
readExternal method called.
An Externalizable instance can designate a substitution object via
the writeReplace and readResolve methods documented in the
Serializable interface.
Record classes can implement Externalizable, but it is ignored:
instances will receive the same treatment as other Serializable
instances, as defined by the
Java Object Serialization Specification, Section 1.13,
"Serialization of Records".
- Since:
- 1.1
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionvoidThe object implements the readExternal method to restore its contents by calling the methods of DataInput for primitive types and readObject for objects, strings and arrays.voidThe object implements the writeExternal method to save its contents by calling the methods of DataOutput for its primitive values or calling the writeObject method of ObjectOutput for objects, strings, and arrays.
-
Method Details
-
writeExternal
The object implements the writeExternal method to save its contents by calling the methods of DataOutput for its primitive values or calling the writeObject method of ObjectOutput for objects, strings, and arrays.- Parameters:
out- the stream to write the object to- Throws:
IOException- Includes any I/O exceptions that may occur
-
readExternal
The object implements the readExternal method to restore its contents by calling the methods of DataInput for primitive types and readObject for objects, strings and arrays. The readExternal method must read the values in the same sequence and with the same types as were written by writeExternal.- Parameters:
in- the stream to read data from in order to restore the object- Throws:
IOException- if I/O errors occurClassNotFoundException- If the class for an object being restored cannot be found.
-
Value classesPREVIEW that are not records are permitted to implement
Externalizable, but the class has no mutable fields, and so is unlikely to be able to properly implement thereadExternalmethod. Instead, thewriteReplacemethod should be used to designate an alternative object for serialization. At deserialization time, the alternative object can implementreadResolveto construct the expected value class instance.