序列化和反序列化
一、什么是序列化和反序列化?。
-
序列化:将内存中的对象转换成二进制流,转换成二进制流之后可以进行持久化和网络传输。简单来说就是将对象写入到IO流中。
-
反序列化:将二进制流的数据转换成对象。简单来说就是从IO流中恢复对象。
-
序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。
二、为什么需要序列化?
-
主要有两个原因:1、持久化 2、网络传输
-
持久化:因为对象存储在JVM中堆区的,如果JVM停止运行了,对象也不存在了。序列化可以将对象转成字节序列,写入硬盘进行持久化。
-
网络传输:序列化以后就都是字节序列了,无论原来是对象、文件、数据、各种不同的格式都会变成字节序列,就可以进行通用的格式传输或保存,传输结束以后,要再次使用就进行反序列化还原,这样对象还是对象,文件还是文件。
-
简单的说:就像你寄一箱饼干,因为体积太大,就全压成粉末紧紧地一包寄出去,这就是序列化的作用。
三、Java如何实现序列化?
要实现对象的序列化,最直接的操作就是实现Serializable接口
import lombok.Data;
import java.io.Serializable;
/**
* @author 国洪志
* @description
* @since 2022-08-10 22:59
**/
@Data
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private Integer age;
}
- 通过实现Serializable接口,建议设置serialVersionUID,不是设置的话编译器会根据类内的内部实现,包括类名、接口名、方法和属性等来自动生成serialVersionUID。
什么是serialVersionUID?
- serialVersionUID用于判断版本是否一致,在反序列化的时候,JVM会把字节流中的serialVersionUID与本地实体类的serialVersionUID进行比较,相同则可以进行序列化,否则会出现反序列化版本不一致的异常(InvalidCastException 转换异常)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理