• 13、序列化和反序列化


        13、序列化和反序列化

            (1)、概述

                一般情况下,一个对象会随着程序的执行完成而消失,而有时我们需要保存下来一个对象的状态,这个时候就可以把它序列化。序列化最终的目的是为了对象可以跨平台存储和进行网络传输,而我们进行跨平台存储和网络传输的方式就是IO,而IO支持的数据格式就是字节数组,二进制串在Java里面所指的是byte[]。

                对象状态也就是实例变量,不是方法,如果是静态变量,那么它不会被序列化到流中,反序列化后这个字段会为空或者0。因为本质上序列化是针对对象的序列化,而静态变量实际上是类的属性,不是对象的属性。

                ①、序列化

                    将数据结构或对象转换成二进制串的过程。

                ②、反序列化

                    将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。

            (2)、 Serializable接口

                Serializable接口只是用来标识这个对象可以被序列化。Serializable接口的注释建议在类里声明serialVersionUID变量,因为默认的serialVersionUID是jdk生成的,不同版本jdk可能生成的值不同,如果序列化数据的serialVersionUID和对应类的serialVersionUID不一致,就会导致反序列化失败。如果是网络传输,那就必须保证序列化和反序列化的serialVersionUID保持一致,否则会反序列化失败。

            (3)、序列化方式

                常见序列化协议包括XML、JSON、Protobuf、Thrift和Avro。

                ①、JDK原生

                    JDK自带序列化方法,只需要类实现Serializable接口,就可以通过ObjectOutputStream类将对象变成byte[]字节数组。JDK序列化会把对象类的描述信息和所有的属性以及继承的元数据都序列化为字节流,所以会导致生成的字节流相对比较大,也不支持跨语言,因此在实际项目和框架中用的都比较少。

                ②、XML

                    XML是一种常用的序列化和反序列化协议,具有跨机器,跨语言等优点。

                ③、JSON

                    JSON序列化常见的框架有:FastJSON、Jackson、Gson 等。

                    JSON起源于弱类型语言Javascript, 它的产生来自于一种称之为”Associative array”的概念,其本质是就是采用”Attribute-value”的方式来描述对象。JSON序列化方式是生成一串有规则的字符串,JSON可读性强,支持跨平台。

  • 相关阅读:
    Linux学习-38-硬盘分区命令fdisk介绍
    minio 单机版安装
    全网顶级,谷歌98k架构师带你手撕spring 高级源码笔记,征服面试官的首选
    应用案例|基于高精度三维机器视觉的检测汽车座椅应用
    Docker 中常用的命令
    Linux系统上非管理员如何启动EasyDSS视频直播点播程序?
    基于机器学习建模的 XSS 攻击防范检测
    JAVA- Acwing -求 1+2+...+n
    销售易CRM怎么样?
    windows10安装ninja过程记录
  • 原文地址:https://blog.csdn.net/L_D_Y_K/article/details/126509305