浅谈java序列化与反序列化

序列化:

  • java中如果要把IO流把内容写入文件中,需要把这些内容转为二进制流写入文件中,因为磁盘操作只允许通过二进流。
  • 如果要把这些内容转为二进制流就需要序列化,自定义类需要serialzable接口,那么,为什么String、int、char等类型就不需要实现该接口呢?因为它们的包装类String、Integer已经实现了这个接口。

对象序列化:

  • 把对象拆分成一个一个的字节序列,把每个字节序列都编上序号,然后按照这个序列往文件中写

反序列化规范:按照对象序列化时每个字节序列编号实现对象的拼接

  • 例如:正常情况下是需要找每个模块的规律完成拼装,但是拼装好的图块拆分时每个小块都编上号码,下一次再拼装时按照这个编号就会很容易的拼装,也就不需要再找规律了。

反序列化:

  • 按照序列化的序号,把对象从文件中读取出来,反序列化时就会按照反序列化规范重构(也就是从文件中读出编好号的序列拼接成一个对象)
  • 其实反序列化也是对象创建的一种方式,只是因为有反序列化规范,采用了重构。

既然反序列化也是创建对象的一种方式那么这个过程是什么样呢?

class A{
    public A(){}
}
class B extends A implements Serializable{
    public B(){}
}
  • 当B反序列化时,也相当于创建B对象过程,首先会加载A对象,调用A的无参构造方法,到B类时不会调用B的构造方法,因为B实现了serializable接口,就会采用反序列化规范重构对象,不会再调用B的无参构造方法(其实对象的重构也是对象的创建只是总从了反序列化规范,不会真正意义的创建对象,但是创建对象的步骤不能少)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值