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

【基础篇-消息队列】——如何通过网络传输结构化的数据( 序列化与反序列化)

目录

    • 一、引入前提
    • 二、选择哪种序列化实现
      • 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、选择哪种序列化实现需要权衡的几个因素

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

相关文章:

  • php与动态网站建设百度推广优化
  • 网站开发建设兼职网站推广专家十年乐云seo
  • 做网站需要固定ip么关键词排名seo
  • 珠海网站制作推广公司哪家好网站建设详细方案
  • 网站代理浏览器插件从事网络销售都有哪些平台呢
  • 怎么做网站链接支付苏州seo关键词优化推广
  • 0629-
  • 《从0到1:C/C++音视频开发自学完全指南》
  • NPM 依赖包版本号 `~` 和 `^` 的区别及最佳实践
  • 定位坐标系深度研究报告
  • Python爬取TMDB电影数据:从登录到数据存储的全过程
  • “组件协作”模式之策略模式
  • 【Python】图像+点云 结合显示
  • Part 0:射影几何,变换与估计-第二章:2D射影几何与变换(下)
  • 【看到哪里写到哪里】算闰年的(year 3) == 0
  • Selenium 二次封装通用页面基类 BasePage —— Python 实践
  • Windows下安装zookeeper
  • ros (二) 使用消息传递点云+rviz显示
  • web目录扫描-御剑
  • Redis跳表(skiplist)底层原理浅析
  • 使用亮数据网页抓取API自动获取Tiktok数据
  • matlab机器人工具箱(Robotics Toolbox)安装及使用
  • 【EDA软件】【应用功能子模块网表提供和加载编译方法】
  • 重置 MySQL root 密码
  • 前端面试专栏-主流框架:13.vue3组件通信与生命周期
  • webman 利用tcp 做服务端 对接物联网