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,克隆,序列化
0
投稿
猜你喜欢
简单实现Android学生管理系统(附源码)
2022-06-12 05:59:04
在@Value注解内使用SPEL自定义函数方式
2022-04-26 20:59:41
C#高级静态语言效率利器之泛型详解
2023-01-24 09:18:02
java编程多线程并发处理实例解析
2022-06-02 22:14:59
Android实现多段颜色进度条效果
2023-09-30 22:07:51
Android GridView实现滚动到指定位置的方法
2021-08-29 10:04:21
Android调用前后摄像头同时工作实例代码
2021-09-10 05:34:45
一篇文章带你深入了解Java类加载
2023-06-11 22:12:00
RecyclerView的使用之HelloWorld
2023-10-24 08:14:13
详解Android开发数据持久化之文件存储(附源码)
2022-06-19 20:30:33
使用AccessibilityService实现自动遍历点赞功能
2023-10-18 16:22:53
SpringCloud使用Zookeeper作为注册中心
2023-11-21 20:28:20
java字符串的重要使用方法以及实例
2023-11-13 23:11:51
Android实现纸飞机的简单操作
2022-05-16 12:26:04
关于dubbo的RPC和RESTful性能及对比
2023-05-23 02:55:14
android通过自定义toast实现悬浮通知效果的示例代码
2022-08-11 03:23:54
Android 获取屏幕的多种宽高信息的示例代码
2021-07-10 06:07:10
java实现基于TCP协议网络socket编程(C/S通信)
2021-10-15 23:41:26
java实现电话本系统
2021-06-05 20:39:39
C# FileStream简单介绍和使用
2023-07-05 23:04:05