java深拷贝

序列化和反序列化合成在一起的方法CloneUtils

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap; /**
* 深拷贝类
* @author King
*/
public class CloneUtils {
/**
* 核心深拷贝方法,其它都是测试方法
* @param obj
* @author King
* @return
*/
@SuppressWarnings("unchecked")
public static <T extends Serializable> T clone(T obj) {
T clonedObj = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
clonedObj = (T) ois.readObject();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
return clonedObj;
} static class Student implements Serializable{
String id = "";
String name = ""; public Student(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} } public static void main(String[] args) {
HashMap<String ,Student> map1 = new HashMap<String ,Student>();
Student stu1 = new Student("1","xixi");
map1.put("stu", stu1);
HashMap<String ,Student> map2 = CloneUtils.clone(map1);
map2.get("stu").setName("bobo");//把新clone的map2中的Student设新值bobo,且它是对象哦 System.out.println(map1.get("stu").getName());//把旧的map1中的Student拿出来发现还是xixi,这说明深拷贝成功
}
}

序列化和反序列化独立方法SerializeUtil

package com.testdemo.pcis.isc.redis;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 序列化对象工具类.
* 参考网址:http://alanland.iteye.com/blog/1600685
* @author King
*
*/
public class SerializeUtil {
public static byte[] serialize(Object object) {
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
try {
// 序列化
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
byte[] bytes = baos.toByteArray();
return bytes;
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} public static Object unserialize(byte[] bytes) {
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
// 反序列化
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("bytes.length"+bytes.length);
}
}
return null;
} public static void main(String[] args) {
Map<String,String> hashMap = new HashMap<String,String>();
hashMap.put("a","b");
byte[] bs = SerializeUtil.serialize(hashMap);
@SuppressWarnings("unchecked")
Map<String,String> deepCopyMap =(Map<String,String>) SerializeUtil.unserialize(bs);
System.out.println(deepCopyMap);
}
}

最新文章

  1. Atomikos实现多数据源的事物管理
  2. ASP.NET MVC 从零开始 - 自动化部署(其二)
  3. C#中的@符号用法
  4. Winform开发框架之读卡器和条码扫描枪的数据接收处理
  5. RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件Web业务平台
  6. 这个代码怎么改??Help快速排序 quicksort
  7. MyBatis返回主键
  8. html 设置Select options值进行绑定
  9. asp.net 的脚本
  10. Linux内核中常见内存分配函数(二)
  11. Muduo阅读笔记---入门(一)
  12. 实现鼠标hover动画效果自己理解的两种方法——练习笔记
  13. Bandwagon的配置记录(一) —— kexue上网
  14. ctrl + alt + T无法启动终端
  15. JavaScript大杂烩17 - 性能优化
  16. sonar自定义规则
  17. PHP 中 var_export、print_r、var_dump 调试中的区别
  18. testNG参数化
  19. 学习ABP遇到的问题汇总
  20. 理解 LDA 主题模型

热门文章

  1. David Silver强化学习Lecture2:马尔可夫决策过程
  2. laravel 数据库获取值的常用方法
  3. php 历史版本下载地址
  4. CentOS7 安装 Jenkins
  5. jquery Ajax get()/post()
  6. Freemarker空值判断
  7. 读取excel思路
  8. pgm15
  9. Django-website 程序案例系列-16 modle.form(表单验证)
  10. BZOJ2794[Poi2012]Cloakroom——离线+背包