Java序列化

对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。

  • 序列化:将java对象转换为二进制字节码的过程。
  • 反序列化:将二进制字节码转换为java对象的过程。
  • 让某个java对象具有序列化机制,需要实现以下两个接口之一
    • Serializable
    • Externalizable
  • private static final long serialVersionUID:这个变量用来表示类的不同版本之间的兼容性。推荐显式声明。不声明的情况下,它的值是Java运行时环境根据类的内部细节自动生成的。若类的源代码作了修改,serialVersionUID 可能发生变化。
    • serialVersionUID不同,则不能反序列化成功。
  • 类中的静态变量不能被序列化,因为序列化的是对象的状态,而静态变量是类的状态。
  • Transient:该关键字用来阻止字段被序列化。
  • 类中的引用类型的变量也需要被实现Serializable接口,否则不会被序列化。
  • 父类也需要实现Serializable接口,否则不会被序列化。反序列化时会默认调用父类的无参构造器。
  • 可以将不需要序列化的属性变量抽取到一个父类中,父类不实现Serializable接口即可,简化赘余Transient的使用。
  • 在序列化过程中,虚拟机会试图调用对象类里的writeObjectreadObject 方法,进行用户自定义的序列化和反序列化,如果没有这样的方法,则默认调用是 ObjectOutputStream 的 defaultWriteObject 方法以及 ObjectInputStream 的 defaultReadObject 方法 。请参考
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值