博客园

序列化和反序列化

一、什么是序列化和反序列化?。

  • 序列化:将内存中的对象转换成二进制流,转换成二进制流之后可以进行持久化和网络传输。简单来说就是将对象写入到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 转换异常)
posted @ 2022-08-10 23:32  放纵!  阅读(111)  评论(0)    收藏  举报