举个例子来说: 【程序编程相关:获取Sql服务器列表 (C#)】
在我写的java学习之对象序列化(一)中您已经知道了序列化机制的一些含义与如何实现序列化,在本文中我们将深入到该机制的内部看看它到底是怎么工作的! 【推荐阅读:自定义日期控件 (ASP.net)】
employee harry = new employee("harry hacke",.........); //是员工又是秘书 【扩展信息:16进制和字符串之间转换】
假设现在写好了两个类,一个employee(员工类),一个manager(经理类),接着创建它们的对象,在创建manager对象时需要为manager指定一个秘书而秘书也是一个employee,在这里我们就用现成的employee对象做manager的秘书,也就是说需要在manager中包含一个employee的对象引用,如下代码:
manager manager1 = new manager("tony tester",.......); //经理对象
manager1.setsecretary(harry); //设置秘书为harry
现在,在内存中实际创建了两个对象,一个employee,一个manager而manager中包含了一个指向employee对象的引用,是引用而已,当我们把以上这些写入磁盘的时候发生了变化,harry的数据被保存了两次,也就是说我们在manager中获得了harry对象的完整拷贝,这当然不是我们想看到的,比如我们要给harry加薪,当然不希望还要搜索该对象的其他全部拷贝,换言之我们希望磁盘上的对象布局与内存中的对象布局保持完全的一致.这就是“对象持续性”!
你可能会想到可以保存“秘书”对象的内存地址,不行的,因为,每一次加载对象都可能使用与原来截然不同的内存地址!
不过,现在好了,java解决这个问题的办法就是采用序列化机制,下面是序列化具体的算法:
1.保存到磁盘的所有对象都获得一个序列号(1,2,3等等)
2.当要保存一个对象时,先检查该对象是否已经保存过.
3.如果以前保存过,只需写入“与已经保存的具有序列号x的对象相同”标记;否则,保存该对象.
通过以上的步骤不久解决了“对象持续性”的问题了!
看个例子吧!(在jdk1.4下调试通过)
import java.io.*;import java.util.*;
... 下一页