一、序列化和反序列化
序列化:将数据结构或对象转换成二进制字节流的过程
反序列化:将在序列化过程中产生的二进制字节流转换成数据结构或对象的过程
常见场景:
1、网络传输时,对象需要先被序列化,接收到后再进行反序列化
2、将对象持久化到磁盘、文件时需要先进行序列化,从磁盘或者文件读取对象时需要进行反序列化
3、将对象存储到数据库如redis之前需要用到序列化,将对象从数据库中读取出来需要反序列化
4、将对象存储到内存之前需要进行序列化,从内存中读取出来之后需要进行反序列化
5、实现对象的深拷贝
序列化属于 TCP/IP 协议的应用层,OSI 七层协议模型中的表示层。
二、实现序列化的方法
实现java.io.Serializable
接口即可。对于不想进行序列化的变量,可以使用 transient
关键字修饰。
使用序列化和反序列化实现深拷贝的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class DeepCopyUtil { public static <T> T deepCopy(T obj) throws Exception { // 创建字节输出流 ByteArrayOutputStream bos = new ByteArrayOutputStream(); // 将对象写入字节输出流中 ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(obj); oos.flush(); oos.close(); // 从字节数组中读取对象 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); T newObj = (T) ois.readObject(); ois.close(); return newObj; } } |
具体步骤如下:
-
将要拷贝的对象进行序列化,得到一个字节流。
-
将字节流反序列化成一个新的对象,即完成了对象的拷贝。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理