A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天行者star 中级黑马   /  2015-10-29 00:37  /  468 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

       ObjectOutputStream.writeObject(obj);

       Object obj = ObjectInputStream.readObject();

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

2 个回复

正序浏览
序列化对象的ID号是根据你的类中成员变量的属性等生成的,比如age属性前加private与不加private生成的ID就不一样,序列化后就不可互相读取,序列化ID是用来标示一个类的,是不可见的,当然你也可以显示定义出来,如果你想要更改类的内容后还可以反序列化,只要序列化前在类中指定这个序列化属性的值就可以了,序列化ID的属性为:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;    这样在反序列化的时候一比对两个类的ID相同,就可以读取了。
回复 使用道具 举报
貌似是可以用来加密的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马