Java学习|序列化与反序列化

序列化与反序列化

文章目录

1)对Java对象进行序列化与反序列化
2)clone方法


概述
  • 序列化是一种持久化的手段,为了实现在JVM停止运行之后还能够保存指定的对象,并在将来重新读取被保存的对象。
  • 在保存对象时,会把其状态保存为一组字节,后面再将这些字节组装成对象,对象序列化不会关注类中的静态变量
对Java对象进行序列化与反序列化
  • 在一个类中实现java.io.Serializable接口,那么它就可以被序列化,要求被序列化的类必须属于Enum、Array和Serializable类型中的一种。
  • 通过ObjectOutputStreamObjectInputStream对对象进行序列化和反序列化
  • Transient 可以使该变量不被序列化到文件中,在被序列化后,transient变量的值被设为初始值。
  • ArrayList的序列化
    • ArrayList底层是通过数组实现的。
    • 在序列化过程中,如果被序列化的类中定义了writeObjectreadObject方法,则虚拟机会进行用户自定义的序列化和反序列化
    • 为了防止一个包含大量空对象的数组被序列化,用transient来声明elementData。为了保证其中的元素可以被持久化下来,通过重写writeObject和readObject方法把其中的元素保留下来。
    • 在使用ObjectOuptStream的writeObject方法和ObjectInputStream的readObject方法时,会通过反射的方式调用
  • 序列化会通过反射调用无参数的构造方法创建一个新的对象。
  • 防止序列化破坏单例模式
    • 在Singleton类中自定义readResolve
clone方法
  • 1.使用new操作符创建一个对象
    • 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。
  • 2.使用clone方法复制一个对象
    • 分配内存,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部 。
  • Person p1=p
    • 引用复制。同一个对象,地址相同。p和p1只是引用而已,他们都指向了一个相同的对象。
  • Person p1=(Person) p.clone()
    • 对象复制,指向不同的对象
  • 浅拷贝
    • 直接将源对象中的成员变量的引用值拷贝给新对象的成员变量
  • 深拷贝
    • 创建一个新的相同的对象
    • clone方法执行的是浅拷贝
    • 通过覆盖Object中的clone方法可以实现

参考

深入分析Java的序列化与反序列化
详解Java中的clone方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值