目录

    • 一、引入前提
    • 二、选择哪种序列化实现
      • 2.1、选择哪种序列化实现需要权衡的几个因素
      • 2.2、如何选择哪种序列化实现
    • 三、实现高性能的序列化和反序列化
    • 四、小结

本文来源:极客时间vip课程笔记

一、引入前提

  • 在 TCP 的连接上,它传输数据的基本形式就是二进制流,也就是一段一段的 1 和 0。在一般编程语言或者网络框架提供的 API 中,传输数据的基本形式是字节,也就是 Byte。一个字节就是 8 个二进制位,8 个 Bit,所以在这里,二进制流和字节流本质上是一样的。
  • 那对于我们编写的程序来说,它需要通过网络传输的数据是什么形式的呢?是结构化的数据,比如,一条命令、一段文本或者是一条消息。对应到我们写的代码中,这些结构化的数据是什么?这些都可以用一个类(Class)或者一个结构体(Struct)来表示。
  • 那显然,要想使用网络框架的 API 来传输结构化的数据,必须得先实现结构化的数据与字节流之间的双向转换。这种将结构化数据转换成字节流的过程,我们称为序列化,反过来转换,就是反序列化。
  • 序列化的用途除了用于在网络上传输数据以外,另外的一个重要用途是,将结构化数据保存在文件中,因为在文件内保存数据的形式也是二进制序列,和网络传输过程中的数据是一样的,所以序列化同样适用于将结构化数据保存在文件中。
  • 很多处理海量数据的场景中,都需要将对象序列化后,把它们暂时从内存转移到磁盘中,等需要用的时候,再把数据从磁盘中读取出来,反序列化成对象来使用,这样不仅可以长期保存不丢失数据,而且可以节省有限的内存空间。

二、选择哪种序列化实现

  • 如果说,只是实现序列化和反序列的功能,并不难,方法也有很多,比如我们最常使用的,把一个对象转换成字符串并打印出来,这其实就是一种序列化的实现,这个字符串只要转成字节序列,就可以在网络上传输或者保存在文件中了。
  • 但是,你千万不要在你的程序中这么用,这种实现的方式仅仅只是能用而已,绝不是一个好的选择。
  • 有很多通用的序列化实现,我们可以直接拿来使用。Java 和 Go 语言都内置了序列化实现,也有一些流行的开源序列化实现,比如,Google 的 Protobuf、Kryo、Hessian 等;此外,像 JSON、XML 这些标准的数据格式,也可以作为一种序列化实现来使用。
  • 当然,我们也可以自己来实现私有的序列化实现。

2.1、选择哪种序列化实现需要权衡的几个因素

  • 序列化后的数据最好是易于人类阅读的;
  • 实现的复杂度是否足够低;
  • 序列化和反序列化的速度越快越好;
  • 序列化后的信息密度越大越好,也就是

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86209.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86209.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86209.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINUX 622 SAMBA

SAMBA案例 user01通过wondows或linux在/samba/share 中创建、删除文件 环境配置 samba安装 [rootsamba caozx26]# yum install samba -y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 正在解决依赖关系 --> 正在检查事务…

Linux Sonic Agent 端部署(详细版)(腾讯云)

(因为服务器是Linux的,只是安装了,并没有验证) 1、编辑docker-compose.yml文件 在Services下添加Agent sonic-agent:image: "sonicorg/sonic-agent-linux:v2.7.2"environment:- SONIC_SERVER_HOST${SONIC_SERVER_HOST…

SpringCloud学习笔记 - 2、关于Cloud各种组件的停更/升级/替换

文章目录 前言SpringCloud是什么?SpringCloud 在 2018 年,技术体系SpringCloud 在 2020 年,“移除”了技术体系SpringCloud 在 2024 年,移除了技术体系SpringCloud 2024年,技术体系服务注册与发现 模块1、Eureka2、Con…

全面掌握 Nginx的功能和使用方法

从 C10K 到现代云原生 第一章 稀缺性哲学与 C10K 挑战 Nginx 的诞生并非偶然,它是在特定历史背景下,对一个严峻工程危机的直接而革命性的回应。要真正理解 Nginx 的设计精髓,我们必须回到 20 世纪末,探究那个催生了它的时代性难题…

[Linux] Vim编辑器 Linux输入输出重定向

Vim编辑器 Vim模式 command模式:该模式下键盘中的字母有特殊含义。如:G是跳转到最后一行;gg是跳转到第一行。 edit模式:在command模式下按i进入该模式。在该模式可以输入内容。在该模式下按esc返回command模式。 extended com…

用Rust写平衡三进制乘法器

1、平衡三进制乘法表 前面写了平衡三进制的加法器,这个乘法器是在这基础上的,没看过的可以回去看看,说到乘法器还是要参考前苏联的资料的,平衡三进制的乘法也是很方便的,在平衡三进制基础中有详细讲过,下图…

解决Vue2官网Webpack源码泄露漏洞

一:漏洞产生 Webpack是一个JavaScript应用程序的静态资源打包器。大部分Vue等应用项目会使用Webpack进行打包,如果没有正确配置,就会导致项目源码泄露,可能泄露的各种信息如API、加密算法、管理员邮箱、内部功能等等。 F12查看源…

新中国风通用读书颂词分享PPT模版

新国风PPT模版,古风影视剧PPT模版,天青色中国风读书颂词分享会PPT模版,国风通用PPT模版,茶味PPT模版,风雪夜归人PPT模版,小别离PPT模版,西江月茶词PPT模版 新中国风通用读书颂词分享PPT模版&…

Rust自动化测试的框架

Rust实现Web自动化测试的框架 以下是10个使用Rust实现Web自动化测试的框架示例,涵盖不同场景和工具链: 使用thirtyfour(基于Selenium) use thirtyfour::prelude::*;async fn example_selenium() -> WebDriverResult<()> {let caps = DesiredCapabilities::chro…

MySQL性能测试模板

引言&#xff1a;为什么MySQL性能测试如此重要&#xff1f; 你是否遇到过这些问题&#xff1a; 线上数据库突然卡顿&#xff0c;QPS暴跌&#xff1f;业务高峰期MySQL服务器CPU 100%&#xff0c;却找不到瓶颈&#xff1f;新功能上线后&#xff0c;数据库性能不升反降&#xff…

第八课:大白话教你逻辑回归

这节课咱们来聊聊 逻辑回归(Logistic Regression),别看名字里有“回归”,它其实是用来干 分类 的活儿的!我会用最接地气的方式,从定义讲到实战,保证你笑着学会,还能拿去忽悠朋友! 一:逻辑回归是啥?——当回归想不开,转行搞分类 1.1 定义:逻辑回归是个“概率算命…

项目中后端如何处理异常?

为了统一管理异常&#xff0c;在项目中封装了自定义异常类(BusinessException),全局异常处理器(GlobalExceptionHandler), 以及一些状态码(ErrorCode), 便于前端统一处理异常. 主要流程如下: 当项目业务发生逻辑错误时,会抛出BusinessException, 其中包含自定义错误码和信息.…

群晖 NAS Docker 镜像加速配置详细教程

通过为群晖NAS的Docker配置镜像仓库加速服务&#xff0c;可显著提升镜像拉取速度与稳定性。本指南详细介绍使用毫秒镜像 (1ms.run) 服务的配置步骤及日常使用方法。 一、配置前准备 开始配置前&#xff0c;推荐使用毫秒镜像的免登录方式获取镜像仓库地址。相比传统的账号密码…

Deepoc行业垂直大模型作为行业知识与AI深度融合的专用工具

一、​​行业专用智能诊断与预测性维护​​ ​​设备健康管理​​ ​​多源异构数据融合​​&#xff1a;垂直大模型通过时序对齐算法&#xff08;如动态时间规整DTW&#xff09;整合振动&#xff08;5kHz&#xff09;、温度&#xff08;1Hz&#xff09;、电流等多维度传感器数…

内存泄漏系列专题分析之二十五:内存泄漏测试report Camera相机进程各种内存指标dump方式

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:内存泄漏系列专题分析之二十四:内存泄漏测试Camera相机进程内存指标分布report概述 这一篇我们开始讲: 内存泄漏系列专题分析之二十五:内存泄漏测试report Camera相机进程各种内存指标dump方式 目录 一、问…

mysql 加锁算法 详解

锁 锁分类 从锁的操作划分 共享锁和排他锁 共享锁&#xff08;读锁&#xff09;和排他锁&#xff08;写锁&#xff09;。对于更新语句&#xff0c;InnoDB会自动加上排他锁&#xff1b;对于查询语句&#xff0c;如果是快照读&#xff0c;由于MVCC的存在&#xff0c;InnoDB不会…

使用EasyExcel导出带下拉框选项excel模板

使用EasyExcel导出excel模版&#xff0c;表头字段动态生成下拉框选择&#xff0c;并且阻止输入不符合下拉框选项的值&#xff0c;会在表格进行提示。 为了避免excel下拉框选项过多&#xff0c;导致下拉框内容不显示&#xff0c;新建一个sheet页&#xff0c;将下拉框内容存储在…

自动化 UI 测试智能体在 Trae 平台的部署体验

我用Trae 做了一个有意思的Agent 「自动化 UI 测试」。 点击 Trae - AI 原生 IDE 立即复刻&#xff0c;一起来玩吧&#xff01; 前言 用户界面&#xff08;UI&#xff09;作为用户与软件交互的窗口&#xff0c;其质量直接影响用户体验和产品口碑。传统的手动 UI 测试不仅效率…

身份证识别接口功能与应用场景-Android证件识别api集成

数字化信息高速发展的时代&#xff0c;信息的高效处理与精准识别已成为众多行业发展的关键驱动力。针对联网平台身份核验过程中&#xff0c;证件信息手动录入效率低、出错率高、用户体验差等问题推出了身份证识别接口&#xff0c;旨在为各行各业提供高效与便捷的身份核验解决方…

POJ2718-Smallest Difference(穷竭搜索:全排列)

题目描述 给定一些不同的十进制数字&#xff0c;您可以通过选择这些数字的一个非空子集并以某种顺序编写它们来形成一个整数。剩余的数字可以以某种顺序写下来形成第二个整数。除非结果整数为 0&#xff0c;否则整数可能不以数字 0 开头。 例如&#xff0c;如果给定数字 0, 1…