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

© 鲤鱼仙 中级黑马   /  2015-7-16 11:47  /  370 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对象的序列化
   使用IO流技术,将对象中的数据,写到文件中,永久保存
   将对象中的数据写到文件中,对象的序列化

   将文件中保存的数据还原回对象,对象的反序列化

io包
  ObjectOutputStream 写对象,序列化流

构造方法
    ObjectOutputStream(OutputStream out)
传递字节输出流,字节输出流中封装文件
    writeObject(Object obj)

  ObjectInputStream 读取对象,反序列化流
构造方法
    ObjectInputStream(InputStream in)
传递字节输入流,输入流中封装文件(必须是ObjectOutputStream写出的文件)
    Object readObject()读取对象,返回对象

对象的反序列化,必须有class文件

静态修饰的成员变量,不能被序列化
原因,静态修饰属于自己的类,不属于对象

transient 修饰成员变量,阻止序列化

java.io.Serializable 序列化接口
任何一个类,实现这个接口,就可以开启序列化功能
这个接口,没有任何抽象方法,实现接口,不需要重写任何方法

标记型接口: 为他的实现类,做一个允许序列化的标记,仅此而已
类似于 肉上有一个蓝色的戳子


以下步骤:
1. 对Person类序列化
2. 修改Person类的源代码
   age 修饰符,由private修改为public -- 保存
3. 不会Person从新序列化,不写对象,直接反序列
   出现了异常

  异常,出现了序列号冲突问题

  person.txt 保存一个序列号 -5075003414356443568
  Person.class文件 保存的序列号  4022578570691496470

   Exception in thread "main" java.io.InvalidClassException:
   cn.itcast.iostream.Person; local class incompatible:
   stream classdesc serialVersionUID = -5075003414356443568,
   local class serialVersionUID = 4022578570691496470
        at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.io.ObjectInputStream.readObject(Unknown Source)
        at cn.itcast.iostream.ObjectStreamDemo.readObj(ObjectStreamDemo.java:25)
        at cn.itcast.iostream.ObjectStreamDemo.main(ObjectStreamDemo.java:12)
       
private int age ;
保存后,生成一个Person.class文件,会有一个序列号
序列化.  person.txt 和 Person.class文件中记录的序列号是一样的

源代码  public int age;
从新编译,生成新的 Person.class文件,根据源代码,从新计算一个序列号
序列化文件 person.txt保存的序列号,和Person.class文件已经不同的

反序列成功,让person.txt和Person.class文件的号一样即可

无论如何修改源代码,保证序列号不变了就行了
自己定义序列号,如果自己定义类序列号,编译的时候class文件,就不会从新计算序列号










0 个回复

您需要登录后才可以回帖 登录 | 加入黑马