如果程序想输出流中输出了三个Person对象,那么程序从输入流中反序列化这些对象时,将会得到三个Student对象,两个Teacher对象所引用的Student对象将不是同一个对象,这显然也违背了Java序列化机制的初衷。
所以,Java序列化机制采用了一种特殊的序列化算法:
所有保存到磁盘中的对象都有一个序列化编号。
当程序试图序列化一个对象时,程序先会检查该对象是否已经被序列化过。只有该对象并为在本次虚拟机中被序列化过,系统才会将该对象转换成字节序列并输出。
如果某个对象已经序列化过,则程序将只是直接输出一个序列化编号而不是再次重新序列化该对象。
但是要注意的是:如果序列化的是一个可变对象时,只有第一次序列化才会将对象转换成字节序列并输出。当对象的实例变量值已经改变之后,及时再次序列化,也只会输出前面的序列化编号。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx