java之Object流与序列化,看过之后恍然大明白

Object流与序列化

这个也很简单,java提供了ObjectOutputStream和ObjectInputStream用来对整个对象进行读写。

哦对了,在分享这篇文章前,我先说一下,我这里有一份Java学习资料,直接加我的Java直播学习群:276582434就能免费领取,长期真实有效。

但是记住:

(1)对象类必须序列化,即实现Serializable接口,才能整个读写。

(2)如果对象的成员变量前加上transient关键字,则该成员变量不能写入其值。

我们直接看个例子吧。如下:

java之Object流与序列化,看过之后恍然大明白

java之Object流与序列化,看过之后恍然大明白

输出结果:

java之Object流与序列化,看过之后恍然大明白

如果,在T这个类中,double k=0.6789;改成了transient double k=0.6789;那么输出结果为

java之Object流与序列化,看过之后恍然大明白

另外还有一个接口,叫externalizable接口,也是用来把对象序列化的。它是你可以控制对象是怎么序列化的,这个接口我们一般用不到。

======================================

说明:

(1)如果某类是可序列化的,则它的子类也自动可以序列化。

(2)当对象被序列化的时候,它的实例变量,无论实例变量是什么(基本类型或者是另外一个对象),也会被序列化,从而被保存。因此需要注意实例变量如果是另外的对象,则该类对象一定要是可序列化的,即实现了Serializable接口。

(3)java允许出现父类不可序列化,但是其子类可序列化的情况。

(4)在将序列化的对象进行读取恢复的时候,每次调用readObject()都会从文件中读出下一个对象,读取的顺序与存入

的顺序相同。

比如你向”object.txt"存储了三个对象,依次是dog,cat,duck。那么在读取恢复时如下:

Dog d =(Dog) ois.readObject();

Cat c = (Cat) ois.readObject();

Duck ck = (Duck) ois.readObject();

(5)对象被恢复时,被transient标记的实例变量,如果是一个对象,则被赋值为null,如果是基本类型,则被赋值为

默认值。

(6)对象序列化保存的时候,静态变量不会序列化保存,因为静态变量属于类,不是从属于某个对象嘛!当对象被

还原时,静态变量为维持在类中原本的样子。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

猜你喜欢

转载自blog.csdn.net/weixin_44941193/article/details/90040113