Java中哪些类可以进行序列化和反序列化呢?如何让一个类可以进行序列化?

匿名网友 匿名网友 发布于: 2016-01-07 00:00:00
阅读 263 收藏 0 点赞 0 评论 0

  • 只有实现了Serializable或Externalizable接口的类的对象才能被序列化,否则ObjectOutputStream的writeObject(Object obj)方法会抛出IOException。
  • 实现了Serializable或Externalizable接口的类也称为可序列化类。
  • Externalizable接口继承Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为。而仅实现Serializable接口的类可以采用默认的序列化方式。
  • Jdk的部分类 如String\Date等都实现了Serializable接口
  • 假定一个Customer类,它的对象需要序列化。 可以有以下三种方式进行
  1. 如果customer类仅仅实现了Serializable接口的类,那么会按照以下方式进行序列化和反序列化:
  • ObjectOutputStream采用默认的序列化方式,对Customer对象的非transient的实例变量进行序列化。
  •  ObjectInputStream采用默认的反序列化方式,对customer对象的非transient的实例变量进行反序列化。

2. 如果customer类仅仅实现了Serializable接口,并且还定义了readObject(ObjectInputStream in)和writeObject(ObjectOutputStream out),那么会按照以下方式进行序列化和反序列化:

  • ObjectOutputStream会调用Customer对象的writeObject(ObjectOutputStream out)方法进行序列化。
  • ObjectInputStream会调用Customer对象的readObject(ObjectInputStream in)方法进行反序列化。
  1. 如果customer类实现了Externalizable接口,那么Customer类必须实现readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,那么会按照以下方式进行序列化和反序列化:
  • ObjectOutputStream会调用Customer对象的writeExternal(ObjectOutput out)方法进行序列化。
  • ObjectInputStream会调用Customer对象的readExternal(ObjectInput in)方法进行反序列化。

评论列表
文章目录