Bean Persistence

当 bean 的属性,字段和状态信息保存到存储中并从存储中检索时,它具有持久性。组件模型提供了一种持久性机制,该机制使组件的状态能够存储在非易失性位置中,以便以后进行检索。

使持久化成为可能的机制称为* serialization *。对象序列化是指将对象转换为数据流并将其写入存储。然后,使用该 bean 的任何 applet,应用程序或工具都可以通过反序列化来“重构”它。然后将对象还原到其原始状态。

例如,Java 应用程序可以序列化 Microsoft Windows 计算机上的“框架”窗口,序列化的文件可以通过电子邮件发送到 Solaris 计算机,然后 Java 应用程序可以将“框架”窗口还原到计算机上已存在的确切状态。 Microsoft Windows 计算机。

然后,使用该 bean 的任何 applet,应用程序或工具都可以通过反序列化来“重构”它。

所有的 bean 必须坚持下去。为了持久化,您的 bean 必须通过实现java.io.Serializable(在 API 参考文档中)interface或java.io.Externalizable(在 API 参考文档中)interface来支持序列化。这些interface为您提供自动序列化和自定义序列化的选择。如果类的继承层次结构中的任何类实现SerializableExternalizable,则该类是可序列化的。

可序列化的类

只要该类或父类实现java.io.Serializableinterface,任何类都可以序列化。可序列化类的示例包括ComponentStringDateVectorHashtable。因此,Component类的任何子类(包括Applet)都可以序列化。不支持序列化的著名类包括ImageThreadSocketInputStream。try序列化这些类型的对象将导致NotSerializableException

Java 对象序列化 API 自动将可序列化对象的大多数字段序列化到存储流。这包括基本类型,数组和字符串。 API 不会序列化或反序列化标记为瞬态或静态的字段。

Controlling Serialization

您可以控制 bean 进行的序列化级别。控制序列化的三种方法是:

默认序列化:可序列化的interface

Serializableinterface使用 Java 对象序列化工具提供自动序列化。 Serializable不声明任何方法;它充当标记,告诉对象序列化工具您的 bean 类是可序列化的。将您的类标记为Serializable意味着您正在告诉 Java 虚拟机(JVM),您已确保您的类可以使用默认序列化工作。以下是有关使用Serializableinterface的一些重要信息:

使用过渡关键字的选择性序列化

要从Serializable对象的序列化中排除字段,请使用transient修饰符标记这些字段。

transient int status;

默认序列化将不会序列化transientstatic字段。

选择性序列化:writeObject 和 readObject

如果您的可序列化类包含以下两种方法之一(签名必须准确),则默认的序列化将不会发生。

private void writeObject(java.io.ObjectOutputStream out)
    throws IOException;
private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException;

您可以通过编写自己的writeObjectreadObject方法的实现来控制序列化更复杂的对象的方式。当您需要更好地控制要序列化的内容,需要序列化默认序列化无法处理的对象,或者需要向不是对象数据成员的序列化流中添加数据时,请实现writeObject。实现readObject以重建您使用writeObject编写的数据流。

可外部化的interface

当您需要完全控制 bean 的序列化时(例如,在写入和读取特定文件格式时),请使用Externalizableinterface。要使用Externalizableinterface,您需要实现两种方法:readExternalwriteExternal。实现Externalizable的类必须具有无参数的构造函数。

首页