Java对象流与序列化

Java的序列化机制是RMI、EJB等技术的技术基础。      

所有的类必须通过实现Serializable接口来实现序列化的功能,Serializable接口没有任何方法,因此你不需要对这些类做任何改动。


----为什么叫序列化

       readObject()函数从ObjectInputStream中读入一个对象。特别是,这个方法会读回对象的类,类的签名以及这个类及其超类中所有非静态和非瞬时的域的值,它执行的反序列允许恢复多个对象引用。--这说明了transient [ˈtrænziənt] 的变量不能被序列化。static的变量也不能序列化。


----修改默认的序列化机制

private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException

private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException

看下ArrayList是如何实现的序列化和反序列化的:




       上述两个方法只需要保存和加载它们的数据域,而不需要关心超类数据和任何其他类的信息。除了让序列化机制来保存和恢复对象数据,类还可以定义自己的机制。为了做到这一点,这个类必须实现Externalizable接口,这需要她定义两个方法:

public void writeExternal(java.io.ObjectOutputStream s) throws java.io.IOException

public void readExternal(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException

       与上述的的方法不同的是,这了两个方法要负责对包括超类数据在内的整个对象的存储和恢复负全责,而序列化机制在类中仅仅只是记录该对象所属于的类。在读入可外部化的类时,对象流将用无参构造器创建一个对象,然后调用readExternal方法。


----序列化单例

       为了解决这个问题,你需要定义另外一个被称为readResolve的特殊序列化方法。如果定义了readResolve方法,在对象被序列化之后就会调用它。它必须返回一个对象,而该对象之后会成为readObject的返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值