学习分享总结第二篇–拷贝和序列化

学习分享总结第二篇–拷贝和序列化

java中的拷贝分为浅拷贝和深拷贝

Object o1 = new Object();
Object o2 = o1;
引用复制, o1和o2, 指向了同一个对象, 只是引用名不同, 改变其中一个, 另一个也会改变,

真正实现对象复制的方法:
被复制的类实现Clonenable接口 (该接口为标记接口, 不含任何方法)
覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象

浅拷贝在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向的对象进行拷贝

例如:
类A的属性中包含类B, 类A实现Clonenable接口, 类B没有实现
在对A进行clone时, 只会复制类B的引用, 改变类A的副本中的类B时, 类A本身的类B属性也会被改变;

要完全实现对类A的拷贝, 需要类B也实现Clonenable接口, 并在类A重写的clone()方法中, 对类B进行clone
这就是深拷贝.
深拷贝在拷贝对象时,同时会对引用指向的对象进行拷贝。
浅拷贝和深拷贝区别就在于是否对 对象中的引用变量所指向的对象进行拷贝。

序列化

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。
在序列化期间,对象将其当前状态写入到临时或持久性存储区。
以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

序列化的使用场景:
内存中的对象持久化时;
对象通过网络传输时;

java序列化的方式: 对象转为字节流
反序列化: 字节流读取成对象
序列化标识符: serialVersionUID, 反序列化时用来对比是否是同一对象
自定义serialVersionUID有两种用途:
  1、 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID。
  2、 在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID

static 静态成员变量不会被序列化;
transient 修饰的变量不会被序列化(比如密码, 敏感信息之类的, 增加安全性)

序列化的几种方式:
java, json, fastjson, hessian, proto stuff,

影响序列化性能的关键因素
序列化后的码流大小(网络带宽的占用);
序列化的性能(CPU资源占用);
是否支持跨语言(异构系统的对接和开发语言切换)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值