Java中对象的序列化方式克隆详解
作者:anialy 时间:2021-09-15 20:02:01
Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。
简述:
用字节流的方式,复制Java对象
代码:
流克隆复制函数
public static Object deepClone(Object obj){
if(obj == null){
return null;
}
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
Object cloneObj = null;
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(obj);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
cloneObj = in.readObject();
return cloneObj;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
ObjectClone.java
package test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectClone {
/**
* 测试对象
*/
private static class Person implements Serializable {
private String name;
private int age;
Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return String.format("name: %s\nage: %s", name, age);
}
}
/**
* 测试函数
*/
public static void main(String[] args) {
Person person = new Person("Henry", 22);
Person newPerson = (Person)ObjectClone.deepClone(person);
System.out.println(newPerson);
}
/**
* 工具类
*
* @param obj
* @return
*/
public static Object deepClone(Object obj){
if(obj == null){
return null;
}
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
Object cloneObj = null;
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(obj);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
cloneObj = in.readObject();
return cloneObj;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
测试结果:
来源:http://blog.csdn.net/anialy/article/details/45279479
标签:java,克隆,序列化
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
C#读取csv格式文件的方法
2023-08-28 22:38:46
Unity实现图形相交检测
2021-09-16 09:31:01
![](https://img.aspxhome.com/file/2023/8/80068_0s.jpg)
三道java新手入门面试题,通往自由的道路--多线程
2023-05-24 23:12:51
![](https://img.aspxhome.com/file/2023/9/61269_0s.jpg)
详解Spring全局异常处理的三种方式
2023-11-11 15:31:47
VS2019打包WPF安装程序最新教程(图文详解)
2021-11-18 15:52:08
![](https://img.aspxhome.com/file/2023/8/81098_0s.jpg)
当Mybatis遇上目录树超全完美解决方案
2021-09-28 16:21:13
![](https://img.aspxhome.com/file/2023/8/75778_0s.png)
SpringBoot 内置工具类的使用
2021-08-26 11:42:21
Java Cookie与Session实现会话跟踪详解
2022-12-22 08:59:13
![](https://img.aspxhome.com/file/2023/8/78378_0s.png)
教你如何使用Java8实现菜单树形数据
2022-09-11 12:29:22
![](https://img.aspxhome.com/file/2023/3/67163_0s.png)
C#操作XML文件步骤
2021-11-04 21:51:44
![](https://img.aspxhome.com/file/2023/3/76433_0s.png)
java学生管理系统界面简单实现(全)
2023-11-28 21:35:25
linux的shell命令检测某个java程序是否执行
2021-07-27 14:32:20
java 避免出现NullPointerException(空指针)的方法总结
2022-08-31 04:15:51
C#计算字符串哈希值(MD5、SHA)的方法小结
2022-07-02 15:47:55
![](https://img.aspxhome.com/file/2023/8/68628_0s.png)
SpringMVC执行过程详细讲解
2023-06-07 10:04:54
![](https://img.aspxhome.com/file/2023/9/62359_0s.png)
java读取解析xml文件实例
2023-01-04 05:52:40
java启动参数之谜的排查过程
2023-02-18 19:47:50
![](https://img.aspxhome.com/file/2023/6/85576_0s.jpg)
Java集合继承体系详解
2023-12-03 00:22:13
![](https://img.aspxhome.com/file/2023/3/76493_0s.jpg)
在Java内存模型中测试并发程序代码
2023-11-24 20:37:55
![](https://img.aspxhome.com/file/2023/7/59967_0s.png)
Java中MultipartFile与File互转的实现
2022-02-15 15:36:02
![](https://img.aspxhome.com/file/2023/9/83079_0s.png)