博客园
序列化和反序列化
Published on 2022-08-10 23:32 in 分类: Java with 放纵!
分类: Java

序列化和反序列化

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

    • 序列化:将内存中的对象转换成二进制流,转换成二进制流之后可以进行持久化和网络传输。简单来说就是将对象写入到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 @   放纵!  阅读(101)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    点击右上角即可分享
    微信分享提示