黑马程序员-序列化

来源:互联网 发布:java游戏编程下载 编辑:程序博客网 时间:2024/05/17 09:40

---------------------- android培训、java培训、期待与您交流! -------------------------------


将对象转换为字节流保存起来,并在以后还原这个对象,这种机制叫做对象序列化。序列化(serialization)是把一个对象的状态写入一个字节流的过程。

将一个对象保存到永久存储设备上称为持久化。 

一个对象要想能够实现序列化,必须实现Serializable接口或Externalizable接口。Serializable接口只有一个实现Serializable接口的对象可以被序列化工具存储和恢复。Serializable接口没有定义任何成员。它只用来表示一个类可以被序列化。如果一个类可以序列化,它的所有子类都可以序列化。 声明成transient的变量不被序列化工具存储。同样,static变量也不被存储。

假设一个被序列化的对象引用了其他对象,同样其他对象又引用了更多的对象。这一系列的对象和它们的关系形成了一个顺序图表。在这个对象图表中也有循环引用。也就是说,对象X可以含有一个对象Y的引用,对象Y同样可以包含一个对象X的引用。对象同样可以包含它们自己的引用。列化和反序列化的工具被设计出来并在这一假定条件下运行良好。如果你试图序列化一个对象图表中顶层的对象,所的其他的引用对象都被循环的定位和序列化。同样,在反序化过程中,所有的这些对象以及它们的引用都被正确的恢复

当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量。 

如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。 

如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记为transient,那么对象仍然可以序列化。

反序列化时不会调用对象的任何构造方法,仅仅根据所保存的对象状态信息,在内存中重新构建对象。



------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

原创粉丝点击