简单理解什么是序列化

news2024/9/30 23:24:14

为什么要序列化

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

什么是序列化

我们以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.coloradmin.cn/o/485359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于海洋捕食者算法的极限学习机(ELM)回归预测-附代码

基于海洋捕食者算法的极限学习机(ELM)回归预测 文章目录 基于海洋捕食者算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于海洋捕食者算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用海洋捕食者算法对极限学习…

一种结合白平衡统计信息和曝光信息的软光敏算法专利学习

背景技术 随着科技的发展&#xff0c;对视频监控设备提出了越来越高的要求。大部分视频监控设备 都需要能够全天候的监控。ICR的中文名称为双滤光片切换器&#xff0c;是用于让滤光片白天切换到红外截止滤光片和晚上切换到全光谱滤光片的监控设备配件。白天的时候&#xff0c…

2023年5月3日 单调栈及其应用

文章目录 单调栈的应用[830. 单调栈 - AcWing题库](https://www.acwing.com/problem/content/description/832/)[P5788 【模板】单调栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](https://www.luogu.com.cn/problem/P5788)[84. 柱状图中最大的矩形 - 力扣&#xff08;Lee…

chatGPT的翻译能力如何-GPT批量翻译软件

ChatGPT翻译软件 如果您正在为翻译工作而烦恼&#xff0c;或者需要面对语种广泛的国际化业务&#xff0c;那么ChatGPT翻译软件是您的不二之选。 ChatGPT翻译软件基于自然语言处理技术&#xff0c;利用先进的机器学习算法和深度神经网络模型&#xff0c;能够快速、高效地进行多…

将Egg项目部署到阿里云服务器

目录 1、连接阿里云服务器&#xff0c;上传文件 2、在阿里云服务器上安装Nodejs 3、下载项目依赖 4、安装 egg-scripts 模块 5、启动项目 6、阿里云服务器开启7001端口 1、连接阿里云服务器&#xff0c;上传文件 推荐使用FileZilla Client工具连接云服务器&#xff0c;可…

基于蝴蝶算法的极限学习机(ELM)回归预测-附代码

基于蝴蝶算法的极限学习机(ELM)回归预测 文章目录 基于蝴蝶算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于蝴蝶算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用蝴蝶算法对极限学习机进行优化&#xff0c;并…

LVS+Keepalived 高可用群集部署

一、LVSKeepalived 高可用群集 在这个高度信息化的 IT 时代&#xff0c;企业的生产系统、业务运营、销售和支持&#xff0c;以及日常管理等环节越来越依赖于计算机信息和服务&#xff0c;对高可用&#xff08;HA&#xff09;技术的应用需求不断提高&#xff0c;以便提供持续的…

[Git] Git零基础?带你快速入门,示例练习上手

&#x1f61a;一个不甘平凡的普通人&#xff0c;致力于为Golang社区和算法学习做出贡献&#xff0c;期待您的关注和认可&#xff0c;陪您一起学习打卡&#xff01;&#xff01;&#xff01;&#x1f618;&#x1f618;&#x1f618; &#x1f917;专栏&#xff1a;算法学习 &am…

STL--list

一、list介绍 列表是序列容器&#xff0c;允许在序列内的任何位置执行恒定时间插入和擦除操作&#xff0c;以及双向迭代 列表容器作为双向链表实现;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个和后一个元素 它们与forward_list非常…

3.rabbitMQ之发布确认高级和整合springboot(重要)找了很多博客整理出来的

1.极端情况下 rabbitMQ需要重启,导致消息投递失败(生产者发消息全部丢失)(交换机或者队列出问题) 生产者需要把数据放到缓存,用定时任务重新发送 解决方法: 0.必须配置文件写 spring.rabbitmq.publisher-confirm-typecorrelatedspring.rabbitmq.publisher-returnstruecorrelati…

appuploader 入门使用

回想一下我们发布 iOS 应用&#xff0c;不仅步骤繁琐&#xff0c;非常耗时。一旦其中一步失误了&#xff0c;又得重新来。作为一名优秀的工程师不应该让这些重复的工作在浪费我们的人生。在软件工程里面&#xff0c;我们一直都推崇把重复、流程化的工作交给程序完成。这次的文章…

【shell脚本】for循环语句

循环语句与函数 一、循环与遍历1.1循环1.2遍历1.3循环与遍历 二、for循环2.1for循环的基本格式2.2for循环小实验2.3双层for循环实验 三、while循环3.1 while格式 四、跳出循环4.1continue跳出循环实验4.2break跳出循环实验 一、循环与遍历 1.1循环 循环 (Loop) 是计算机编程中…

不会前端,怎么快速打造属于自己的个人博客?

个人博客 简介提前准备 一、初始化vuepress项目二、页面配置首页配置顶部配置顶部导航栏路由配置侧边导航栏配置 三、打包部署四、数据统计插槽自定义插槽配置整体结构页面效果 项目地址 简介 主要教大家如何快速搞一个属于自己的博客网站&#xff0c;特别是一些不怎么会前端的…

【C++】——类与对象(上)

文章目录 1. 前言2. 面向过程和面向对象3. 类的引入4. 类的定义4.1 类的俩种定义方式 5. 类的访问限定符及封装5.1 类的访问限定符5.2 封装 6. 类的作用域7. 类的实例化8. 类对象的存储方式9. this指针9.1 this指针特性 10. 结尾 1. 前言 今天我们来学习C初期最重要的知识点&a…

用于无线传感器网络路由的改进leach协议(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 当前&#xff0c;无线传感器由于技术的发展得到更加广泛的应用&#xff0c;针对无线传感器网络&#xff08;WSN&#xff09;的…

linux重装mmsegmentation

前言 换了个电脑&#xff0c;就想着把之前的mmsegmentation-V0.26.0代码放到新环境&#xff0c;结果踩了不少坑~ 过程 官方步骤 0 安装miniconda 1 创建conda 环境 最开始用的是python3.10&#xff0c;后来发现版本太高不是一件好事&#xff0c;所以装的python3.8 2 安装…

FineBI 6.0入门基础(二)

在图形中分析 组件还可以进行复制,如下图 复制后,切换为【自定义图表】 1.将【毛利额】调整为折线(在图形属性里面进行调整) 2.由于【毛利额】和【毛利额环比增长率】数值差距较大,可将指标中的【毛利额环比增长率】调整为右值轴 3.将图例调整显示位置(组件样式-图例…

ZooKeeper 避坑指南: ZooKeeper 3.6.4 版本 BUG 导致的数据不一致问题

作者&#xff1a;子葵 背景 ZooKeeper 作为分布式系统的元数据中心&#xff0c;对外服务的数据一致性需要得到很好的保证&#xff0c;但是一些老版本的 ZooKeeper 在一些情况下可能无法保证数据的一致性&#xff0c;导致依赖 ZooKeeper 的系统出现异常。 某用户使用 3.4.6 版…

回归问题(AI笔记)

人工智能 回归问题 1943 年&#xff0c;心理学家沃伦麦卡洛克 (Warren McCulloch)和数理逻辑学家沃尔特皮茨(Walter Pitts)通过对生物神经元的研究&#xff0c; 提出了模拟生物神经元机制的人工神经网络的数学模型 &#xff0c;这一成果被美国神经学家弗 兰克罗森布拉特(Frank …

(别再手动点APP了)UiAutomator2自动化测试框架带你玩转APP操作

目录 前言 一、uiautomator/uiautomator2的前生今世 1.官方文档介绍 2.梳理一下脉络 3.三款框架对比 二、uiautomator2简介 1.项目组成 2.工作原理 三、环境搭建 1.安装uiautomator2 2.初始化设备 3.init时都干了啥&#xff1f; 四、基础操作 1.连接设备 2.命令…