Java 序列化浅谈

序列化:

序列化是去存储对象的状态的, 一个对象序列化的时候要么是可以完全序列化, 如果里面有一个object是没有声明serializable接口的则无法序列化整个对象.

想要序列化的类必须声明serializable接口

如果序列化过程中想跳过某些变量, 则给这些变量声明为transient的

 

反序列化:

当一个序列化流被反序列化时候, JVM会尝试在堆上创建一个新的对象, 将对象的状态恢复回来.

 

 要点:

  1. 你可以通过序列化来存储对象的状态
  2. 使用ObjectOurputStream来序列化对象
  3. 用FileOurputStream链接ObjectOutputStream将对象序列化到文件中.
  4. 对象必须实现序列化整个接口才能被序列化.如果父类实现了序列化, 则子类自动实现.
  5. 如果有不能序列化的对象, 代码运行期间会抛出异常
  6. 不想被序列化的变量声明为transient
  7. 反序列化时候读取对象的顺序必须与写入的顺序相同
  8. 静态变量不会被序列化.

思考:

如果在一个对象序列化之后,修改了这个类, 会造成序列化的文件无法反序列化.如何解决这个问题.

每当有个对象呗序列化的同时, 会附带一个类的版本识别ID. 被称为serialVersionUID, 根据类的结构信息计算出来的.在对象被反序列化之前会比较id.

 

posted @ 2018-04-17 13:32  YanyuWu  阅读(100)  评论(0)    收藏  举报