我们知道 java 在 new 一个对象的时候,其代价是比 clone 一个对象的代价是要高的,但是拷贝也不能直接用,因 java 的拷贝分为深拷贝和浅拷贝, 虽然深拷贝可以解决浅拷贝的问题,但是也会在深拷贝的时候 new 对象。有一个比较好的额代替方法是:利用序列化实现对对象的拷贝。

在内存中通过字节流的拷贝是比较容易的实现的,把原对象写入到一个字节流中,再从字节流中将其读取出来,这样读取到的对象就是原对象的一个 clone 体,而且不存浅拷贝的问题,是一个真正的深拷贝。

public class CloneUtils {

@SuppressWarnings("unchecked")

public staticT clone(T obj){

T cloneObj = null;

try {

//写入字节流

ByteArrayOutputStream out = new ByteArrayOutputStream();

ObjectOutputStream obs = new ObjectOutputStream(out);

obs.writeObject(obj);

obs.close();

//分配内存,写入原始对象,生成新对象

ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());

ObjectInputStream ois = new ObjectInputStream(ios);

//返回生成的新对象

cloneObj = (T) ois.readObject();

ois.close();

} catch (Exception e) {

e.printStackTrace();

}

return cloneObj;

}

使用该工具类的对象必须要实现Serializable接口,否则是没有办法实现克隆的。

java 深拷贝 序列化_java 之 利用序列化实现深拷贝相关推荐

  1. java kryo 序列化_java中的序列化方式及dubbo使用kryo序列化

    java中的序列化方式: 1. 自带序列化  ObjectInputSteam. ObjectOutStream等 2. hession2 3. json ,xml等格式 4.kryo 5.FST - ...

  2. java 不能反序列化_java中的序列化与反序列化

    序列化就是将一个对象以及他的属性写入一个文件,保存在存中对象的状态 反序列化就是把保存的对象状态再读出来 实现序列化与反序列化就要使用到IO操作中文件的字节流输入与输出 inputStream与out ...

  3. java gson序列化_java – Gson多态序列化

    使用Gson 2.2.2我正在尝试序列化POJO(行为)的数组列表. 我有一个适配器几乎是我在网上看到的副本: public class BehaviorAdapter implements Json ...

  4. java 股票 代码_Java中利用散列表实现股票行情的查询_java

    ---- 在java中,提供了一个散列表类Hashtable,利用该类,我们可以按照特定的方式来存储数据,从而达到快速检索的目的.本文以查询股票的收盘数据为例,详细地说明java中散列表的使用方法. ...

  5. java 数据 权限_Java如何利用Mybatis进行数据权限控制详解

    前言 权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Bas ...

  6. java角谷_Java:利用递归方法实现角谷定理

    问题描述: 角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 3 ...

  7. java高性能序列化_Java最佳实践–高性能序列化

    java高性能序列化 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论并演示如何将对象序列化用于高性能应用程序. 所有讨论的主题均基于用例,这些用例源于电信行业关键任务超 ...

  8. java serializable用法_JAVA序列化Serializable及Externalizable区别详解

    序列化简介 Java 的对象序列化将那些实现 Serializable 接口的对象转换成一个字节序列,并能在之后将这个字节序列完全恢复为原来的对象. 这就意味着 Java 对象在网络上的传输可以不依赖 ...

  9. java中序列化与反序列化_Java中的序列化

    java中序列化与反序列化 Java提供了一种称为序列化的机制,以按字节的有序或字节序列的形式持久化Java对象,其中包括对象的数据以及有关对象的类型和存储在对象中的数据类型的信息. 因此,如果我们已 ...

最新文章

  1. 在哪个瞬间你感觉自己是一个产品经理?
  2. linux日志本地存储和网络存储,文件系统和本地存储管理 1
  3. 第4章:分布式数据库 HBase
  4. \sdk\include\wspiapi.h(47) : error C2265: 'Unknown' : reference to a zero-sized array is illegal 解
  5. @Scheduled
  6. 思科3550 IOS
  7. 翠香猕猴桃 和 薄皮核桃,快来下单
  8. [bzoj 4811] 由乃的OJ(贪心 + 树链剖分)
  9. 截取年月日在hana中怎么写_获取Sting类型格式-日期中的年月日
  10. sqlserver 累计数量_用sqlserver查询累计值
  11. 分享最新36款高质量免费英文字体
  12. Python学习总结(5)——字符串
  13. Java工程师必备资料,整合1G多jar包,网速慢也没关系,关注获取更多资源
  14. iPhone升级系统卡在进度条界面怎么办?
  15. 计算机老显示错误内存不足,电脑老是显示内存不足怎么办
  16. 2022-2027(新版)全球与中国鱼藤酮行业发展动态及前景展望报告
  17. 用户太多:互联网巨头之惑
  18. 分布式事务解决方案 dbpack 和 hptx 的演进
  19. JSF学习笔记超详细,从入门到精通,持续更新中~
  20. Springboot配置Nacos出现异常

热门文章

  1. 湖南师范大学2018年大学生程序设计竞赛新生赛 A 齐神和心美的游戏【hash】
  2. linux下监控某个目录是否被更改
  3. python 简介+安装(搬运廖雪峰网站)
  4. jQuery三天复习.md
  5. [转载] Python数据可视化库-Matplotlib——折线图绘制
  6. [转载] python里字典的用法_python中字典(Dictionary)用法实例详解
  7. [转载] Python-类变量,成员变量,静态变量,类方法,静态方法,实例方法,普通函数
  8. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
  9. PTA 7-2 深入虎穴 (30 分)
  10. 下半年值得关注的新机和科技趋势