什么是序列化? 如何实现(反)序列化 序列化的应用

article/2025/9/17 1:39:31

  • 1. 什么是序列化与反序列化,什么情况需要序列化
    • 1.1 序列化
      • 序列化是什么
      • 序列化的目的
      • 什么情况需要序列化
    • 1.2 反序列化
      • 反序列化是什么
      • 反序列化的目的
  • 2. Java中的序列化与反序列化
    • 2.1 如何实现序列化
      • Java序列化的规定
      • 序列化的API
      • 实现(反)序列化的示例
      • 对象在硬盘上的存储方式
    • 2.2 利用序列化,实现深拷贝
      • 什么时候不要序列化
      • Java中如何防止序列化

1. 什么是序列化与反序列化,什么情况需要序列化

1.1 序列化

序列化是什么

从百度百科中可以得知,序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。

所以说,序列化是一种技术,Java只是以某种形式实现了序列化

序列化的目的

  • 序列化最终的目的是为了对象可以跨平台存储,和进行网络传输 (也可以在分布式应用系统中传递数据)
  • 也可以是将对象以二进制字节序列的方式存储在硬盘上。

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送
发送方需要把这个类型数据(对象)转换为二进制字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。

什么情况需要序列化

经过上面的分析,已经很明确的知道凡是需要进行“跨平台存储”和”网络传输”的数据,都需要进行序列化。

本质上存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。

1.2 反序列化

反序列化是什么

经过上面的知识点,我们已经知道,序列化是将对象的状态信息转换为可以存储或传输的形式的过程;把对象转换为字节序列的过程称为对象的序列化。
那么把字节序列恢复为对象的过程称为对象的反序列化。

反序列化的目的

  • 将字符序列方式存储的数据转换成能够识别的对象信息

2. Java中的序列化与反序列化

在Java中,一切皆对象,当我们需要实现对象的序列化时,也就需要将Java对象转换成一种对应的字节形式存储;

在Java的OutputStream类下面的子类ObjectOutputStream类就有对应的WriteObject(Object object) 方法来实现序列化,其中的参数object就要求实现了java的序列化的接口。

2.1 如何实现序列化

Java序列化的规定

Java只能将支持 java.io.Serializable 接口的对象写入流中;每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包

如果一个对象没有实现Serializable序列化接口,而就去使用了ObejctOutputStream去序列化对象,运行时则会报错

还有一个注意点:如果类的属性包含其他的类,那么那些类也需要实现序列化接口,否则也会报错。

序列化的API

java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。

java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。

实现(反)序列化的示例

在Java中,我们可以使用ObjectOutputStream(对象输出流)和FileOutputStream(文件输入流)搭配使用,将对象转换成字节序列后以文件的形式存储在硬盘上;这个过程也被称为Java对象的持久化;

在这里插入图片描述

上述序列化的规定中已有提到,如果一个类需要序列化,那么一定要实现序列化接口(Serializable),如果不实现序列化接口,那么运行时就会报错,下面是示例
在这里插入图片描述

对象在硬盘上的存储方式

通过上述例子,我们可以看出,Student的一个实例化对象,被序列化后以文件的形式存储在了硬盘上
当我们以文本打开这个objectFile.obj文件,会发现里面都是乱码
在这里插入图片描述
这是因为对象会被转换为二进制字节序列存储在硬盘上,这个文件是以二进制的形式编写的,当用文本编辑器将它打开时,这些二进制代码与某个字符集映射之后,显示出来的东西就成了乱码。
即使输出的是一个String的对象,也是以该String对象的二进制编码的形式输出,而不是输出String对象的内容。

那我们想以二进制的形式打开这个文件,可以使用UltraEdit工具,不过该工具会自动将2进制转换为16进制进行展示
在这里插入图片描述

2.2 利用序列化,实现深拷贝

在Java中,clone()默认实现是浅拷贝,若想实现深拷贝,则需实现Cloneable接口并重写clone()方法

重写clone()方法,我们一般有两种方式去实现深拷贝。

  • new对象后返回,通过get与set构造器给新创建的类属性赋值
  • 通过序列化,直接从硬盘上读取文件转换成新的对象返回

方式1
在这里插入图片描述
方式2 序列化
我们可以通过字节数组(ByteArray)输入输出流作为中间介质,来对对象进行读入和写出;
这里的字节数组,本质也就是对象序列化后在硬盘上的存储方式;

在这里插入图片描述

什么时候不要序列化

在Java进行应用开发的时候,用户的个人信息,包括密码、电话号码、具体住址这些隐私信息的时候,就需要防止对象被序列化,如果被序列化用于网络传输,则很有可能会造成安全问题。

Java中如何防止序列化

在Java中,声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态,transient代表对象的临时数据。

所以在字段的前面,加上transient关键字,就可以防止该字段被用于序列化;
在这里插入图片描述


http://chatgpt.dhexx.cn/article/uy8d37cq.shtml

相关文章

1.传输线驻波比

Transmission Line & Active Voltage Standing Wave Ratio 1.1 信号完整性概述 数字电路的出现极大地提高了电子产品的抗干扰能力,随着电路的工作频率不断提高,这种抗干扰能力逐渐显得有些“力不从心”。特别是在高速电路的范畴,“理想互…

驻波比,功率计原理,短波机驻波测量

文章内容转载自http://bbs.cqcqcq.com/thread-1627-1-1.html 衡量功率反射大小的量称为「反射系数」,常用Γ (音 gamma) 或ρ (音 rho) 表示。为了讨论简单起见,我们假设负载阻抗为纯阻性的。反射系数定义为: ρ (反射电压波) / (入射电压波)…

入射波反射波和驻波的特性推导

入射波反射波和驻波的基本推导 学习雷达过程中,发现阻抗匹配是一道迈不过去的坎,而阻抗匹配、能量传输与电压驻波比又有千丝万缕的联系,而电压驻波比则与反射波、入射波等相关的特性有关,于是写下此文章记录一下推导过程。 懒得正…

反射系数、驻波比、S参数之间的关系

反射系数、驻波比、S参数之间的关系! 转载▼ 回波损耗(Return Loss): 入射功率/反射功率, 为dB数值 反射系数(Г): 反射电压/入射电压, 为标量 电压驻波比(Voltage Standing Wave Ration): 波腹电压/波节电压 S参数: S12为反向传输系数,也就是隔离。…

馈线中的VSWR电压驻波比

在射频信号馈线传输中,信号传输有一个概念:驻波比。 这个概念好理解,就是一个波进去,在终端由于不匹配形成反射波回来。 但是不是那么好想像,叠加后是啥模样的波形。 借助pythonmatplotlib可以方便模拟出来&#xf…

简单了解什么是驻波比?

驻波比全称为电压驻波比,又名VSWR,为英文Voltage Standing Wave Ratio的简写,在理解电压驻波比之前先要明白什么是“驻波”。 假设两个波长相同的波以相反的方向传播,绿线波朝着左方向旋转,蓝线波朝着右方向旋转&…

驻波比理解

VSWR(Voltage Standing Wave Ratio)代表电压驻波比。要完全理解这个术语,需要知道什么是“驻波”。 假设两个波长相同的波以相反的方向传播,如下所示。一个波表示为蓝线,它朝着正确的方向旋转。另一个波用绿线表示,它在左方向旋转…

电压驻波比,回波损耗,传输损耗,电压反射系数,功率传输,功率反射换算表

回波损耗(Return Loss):入射功率/反射功率, 为dB数值反射系数(Г):反射电压/入射电压, 为标量电压驻波比(Voltage Standing Wave Ration): 波腹电压/波节电压S参数:S12为反向传输系数,也就是隔离。S21为正向传输系数,也…

天线的驻波比

驻波比是衡量天线性能的重要参数之一,体现了天线向外界空间辐射能量的潜力。这是一个标量的参数,还有史密斯圆图(the Smith Chart)来衡量天线的阻抗特性,可以分析天线是感性还是容性的,并指明了调整天线的方向。 目录​ 一、什么是驻波比VSWR或者SWR

关于驻波比(VSWR)的详细解析

from滤波器 ◆ ◆ ◆ 文 | 滤波器(ID:Filter_CN) 驻波比(VSWR)用来检测天馈线系统、射频接头以及所有的连接到基站的射频设备的工作状态。VSWR过高会导致掉话、高误码率,而且由此引入的发射/接受功率的衰减会导致小…

射频回波损耗、反射系数、电压驻波比、S参数的含义与关系

以二端口网络为例,如单根传输线,共有四个S参数:S11,S12,S21,S22,对于互易网络有S12=S21,对于对称网络有S11=S22,对于无耗网络,有S11*S…

【回波损耗(dB)和电压驻波比(VSWR)之间的关系】

回波损耗(dB)和电压驻波比(VSWR)之间的关系 反射系数(Г / Rho) Г=反射波振幅/入射波振幅 =(传输线特性阻抗-负载阻抗) / (传输线特性阻抗负载阻抗) 回波损耗( RL ) 回波损耗: 回波损耗,又称为反射损…

RF(射频) - VSWR(电压驻波比)

VSWR代表电压驻波比(Voltage Standing Wave Ratio)。要完全理解这个术语,你需要知道什么是“驻波”。 你可能已经在高中物理课上学到了驻波。只要刷新你的想法,让我解释一下驻波是什么。 假设具有相同波长的两个波沿相反方向传播…

天线参数-自用1

天线参数 1丶 天线谐振频率 Resonance Frequency 2丶驻波比 指的是行驻波的电压波腹值和电压波节值之比 2.1 驻波 驻波即两个反方向波的合成波形,该合成波相位不变,幅度变化,节点位置(值 0)不会发生变化。 幅度最大…

内联函数(inline)总结

1:定义: 它们看起来象函数,运作起来象函数,比宏(macro)要好得多,使用时还不需要承担函数调用的开销。当内联一个函数时,编译器可以对函数体执行特定环境下的优化工作。这样的优化对"正常"的…

【C++】内联函数理解

内联函数 内联函数的使用是对于C语言中宏函数的一种改进,他继承了宏的优点并避免了宏的缺点。 宏的优点:a. 代码复用性高 b. 宏函数减少栈帧建立,提高效率 宏的缺点:a. 可读性差 b. 没有类型安全检查 c. 不方便调试 C基本不再建议…

在什么情况下方法调用会被内联?

写在前面 本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和文献引用请见100个问题搞定Java虚拟机 解答 方法内联有许多规则。…

【C++】 内联函数详解(搞清内联的本质及用法)

目录 一.什么是内联函数 1.直观上定义: 2.更深入的思考: 二.为什么使用内联函数 1.为什么要代替部分宏定义 2.普通函数频繁调用的过程消耗栈空间 3.更深入的思考 三.内联函数和编译过程的相爱相杀 四.内联函数怎么用,在哪儿用&#…

[C++] 内联函数inline 以及 auto关键字 -- C++入门(4)

本篇文章主要包括内联函数和auto关键字。其中,内敛函数包括概念,特性等;auto关键字的使用规则,使用场景等。 目录 1.内敛函数 1.1问题引入: 1.2内联函数的概念 1.3内敛函数的特性 2.auto关键字 2.1auto简介 2.2 auto的…

Windows误删注册表恢复方法

昨天不小心把注册表给删了,期间一直找解决方法,因为没有usb等重装工具... 我把注册表的HKEY_LOCAL_MACHINE\software这个重要的东西给误删了 ---结果就是软件打不开.就连删除东西都没用,自带的cmd什么的系统工具打不开... 关机重启问题更严重了,直接蓝屏,但是还好,开机的时候…