当前位置: 首页 > news >正文

简单理解什么是序列化

为什么要序列化

序列化的目的就是为了对象可以在网络层进行传输,
比如通过后端传给前端数据。

什么是序列化

我们以Java为例。

序列化就是把对象转化为可传输的字节序列过程,这个字节序列可以是字符串,比如JSON格式的字符串,把内存中的java对象转化成JSON格式的字符串的过程,就是序列化的过程。

为什么转化成字符串就算是序列化呢?

因为字符串实现了
Serializable接口,实现了Serializable接口的类,便可以通过网络层进行传输(序列化的目的就是为了在网络层进行传输)。
在这里插入图片描述
由此可见,String类实现了Serializable接口,其实你也可以自己创建一个类,去实现这个接口,然后你的类的对象也就完成了序列化,可以直接通过网络层进行传输,然而这种方式我们通常不建议,因为。

直接使用 java.io.Serializable 接口传输对象需要确保参与方都能识别和解析序列化格式,并具有相同的对象类定义,否则可能会出现兼容性问题。此外,由于序列化对象会增加数据传输量和复杂度,因此对于大型或频繁传输的数据,使用 JSON 格式传输会更加高效。

当然,这并不代表 java.io.Serializable 接口在网络传输中没有应用场景。实际上,在某些特定的应用场景中,如果需要精细地控制对象的序列化过程、保护数据安全性等,使用 java.io.Serializable 接口传输对象可能更为合适。

但是我们一般都采用JSON格式的字符串的方式来完成对象的序列化,以达到从后端向前端通过网络来进行传输的目的。

哪些对象是我们需要进行序列化的?

我想说的是,你希望传输的Java对象是需要进行序列化的。你也许会说这不废话吗,我要从网络层传输,当然要序列化。

但是有些类的对象java已经帮我们序列化好了,比如

  1. java.lang.String: 字符串对象可以被序列化,这意味着可以在客户端和服务器之间轻松传输字符串。

  2. java.lang.Integer、java.lang.Double 等基本类型的封装类: 基本类型的封装类可以被序列化,这意味着可以在客户端和服务器之间轻松传输数字。

  3. java.util.Date: 日期对象可以被序列化,这使得在需要将数据存储到数据库中时,可以更轻松地直接将对象写入数据库。

  4. java.util.List、java.util.ArrayList、java.util.HashMap等集合类: 常用的集合类也可以被序列化,这意味着可以轻松地在客户端和服务器之间传递列表和映射集。

  5. java.io.Serializable: Serializable 接口的实现类可以被序列化,如 java.net.Socket、java.net.URL 等网络相关的类。

等等等等,总而言之,判断一个自带的Java类有没有被序列化,你就点进去看看有没有实现Serializable 接口

这些都不需要我们进行序列化,需要我们进行序列化的是我们自己创建的java对象,因为我们自己创建的Java对象通常是不实现Serializable 接口的。此时我们通常就会把他转化成JSON格式的字符串进行传输。

采用JSON格式的字符串进行传输优点如下

  • 通用,现在主流的前后端交互,均使用JSON格式的字符串来进行前后端数据的传输
  • 灵活,JSON字符串可以表示各种复杂的数据结构,对象啊,数组啊,集合啊等等,可以随意嵌套使用

如何序列化为JSON格式的字符串

我们通常采用外部的框架来进行实现,常见的可以把一个Java对象转化成JSON格式的字符串的框架有alibaba的fastjson。

即使有些已经进行了序列化比如HashMap等,我们在传输的过程中有时候遵循前后端通过JSON数据传输的规范,我们依然把他转化成JSON字符串来传输,尽管一个HashMap的对象已经支持序列化,可以直接传输。

将fastjson引入到pom依赖文件中

        <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.80</version></dependency>

在你需要进行序列化的地方直接调用JSONObject.toJSONString方法,把对象传入就可以完成把对象转化成JSON格式的字符串的过程,此时这个字符串就可以通过网络任意传输了,因为字符串本身是支持序列化。

代码看不懂没关系,只在意红框里的内容就行。
在这里插入图片描述

到此,序列化就讲完了,想必你对序列化也有了一定的认识。

感谢观看💕

http://www.lryc.cn/news/65263.html

相关文章:

  • Django初识
  • ARM嵌入式编译器-volatile关键字对编译器优化的影响
  • 销售数据分析怎么做?这篇文章说清楚了
  • 二十六、ISIS技术总结
  • 三菱m70 m80系统解密 三菱m80机床到期解锁
  • InnoDB 磁盘结构之数据字典和双写缓冲区
  • Django模型层part two - 多表关系创建和多表操作
  • 智能优化算法:浣熊优化算法-附代码
  • 【51单片机】数码管显示(样例展示以及异常分析)
  • Android InputChannel事件发送接收系统分析
  • Java时间类(五)-- LocalDate()类
  • 用手机号码归属地 API 开发的应用推荐
  • 测试从业第 3 年,我看到了终点......
  • 结巴分词原理分析
  • JavaEE 第三-四周
  • Ububtu20.04 无法连接外屏(显卡驱动问题导致)
  • 配置JDK环境变量
  • 保护移动设备免受恶意软件侵害优秀方法
  • 一个人在家怎么赚钱?普通人如何通过网络实现在家就能赚钱
  • ChatGPT诞生的新岗位:提示工程师(Prompt Engineer)
  • 机器学习笔记 使用PPOCRLabel标注自己的OCR数据集
  • 【C++初阶】类和对象(二)
  • 深入探讨Java、Spring和Dubbo的SPI机制
  • 使用机器人为无线传感器网络提供服务(Matlab代码实现)
  • QT自制软键盘 最完美、最简单、跟自带虚拟键盘一样
  • 优思学院|8D和DMAIC两种方法应如何选择?
  • 回归预测 | MATLAB实现MLR多元线性回归预测(多指标评价)
  • PHP 二维数组相关函数:二维数组指定key排序,二维数组转一维数组,两个二维数组取差集,对象转数组,判断元素是否在多维数组中
  • 演出剧院门票售票预约小程序开发制作功能介绍
  • JUC之Java内置锁的核心原理