黑马程序员技术交流社区

标题: 序列化接口的id有什么用 [打印本页]

作者: 天行者star    时间: 2015-10-29 00:37
标题: 序列化接口的id有什么用
对象经常要通过IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->“zxx,male,28,30000”Person,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口。

       ObjectOutputStream.writeObject(obj);

       Object obj = ObjectInputStream.readObject();

       假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!


作者: 往事如风555    时间: 2015-11-4 14:25
貌似是可以用来加密的
作者: rookiefly    时间: 2015-11-4 15:06
序列化对象的ID号是根据你的类中成员变量的属性等生成的,比如age属性前加private与不加private生成的ID就不一样,序列化后就不可互相读取,序列化ID是用来标示一个类的,是不可见的,当然你也可以显示定义出来,如果你想要更改类的内容后还可以反序列化,只要序列化前在类中指定这个序列化属性的值就可以了,序列化ID的属性为:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;    这样在反序列化的时候一比对两个类的ID相同,就可以读取了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2