当前位置: 首页 > 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、选择哪种序列化实现需要权衡的几个因素

  • 序列化后的数据最好是易于人类阅读的;
  • 实现的复杂度是否足够低;
  • 序列化和反序列化的速度越快越好;
  • 序列化后的信息密度越大越好,也就是
http://www.lryc.cn/news/575135.html

相关文章:

  • Class00.3矩阵计算
  • Linux进程控制与进程间通信(IPC)全面指南
  • Prompt:面向目标的提示词
  • Java如何导出word(根据模板生成),通过word转成pdf,放压缩包
  • aspose.word在IIS后端DLL中高并发运行,线程安全隔离
  • Java8 Stream流:Stream流的思想和获取Stream流
  • CTF Writeup: [强网杯 2019]随便注挑战解析
  • selenium UI自动化元素定位中classname和CSS区别
  • 渗透靶场:事件和属性被阻止的反射xss
  • Vue+ECharts后台仪表盘加载地图功能
  • Android14音频子系统-ASoC-ALSA之DAPM电源管理子系统
  • 个人技术文档库构建实践:基于Cursor和GitHub的知识管理系统(含cursor rules)
  • Github Copilot协助解决cucumber插件不支持async/await
  • 【Orange Pi Zero 3】-usb摄像头项目
  • 服务器性能优化通用方案
  • 一个项目中调用两个不同后台,前端如何优雅实现无感刷新Token调用接口
  • webpack5 css-loader:从基础到原理
  • css实现a标签前面加小图标
  • 【GStreamer】减小延时的参数设置、从RTP中获取时间戳
  • 深入探索WordPress Multisite:构建与管理多站点网络
  • 【Lua 基础学习】
  • C++(智能指针)
  • LeetCode 3298.统计重新排列后包含另一个字符串的子字符串数目2
  • ivx创建一个测试小案例
  • Vue3插槽
  • 基于springboot+vue的智慧农业专家远程指导系统
  • 批量DWG转PDF工具
  • ES和 Kafka 集群搭建过程中的典型问题、配置规范及最佳实践
  • RK平台HDMI-IN/camera调试:预留CMA内存
  • Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory