【Linux Network】序列化和反序列化

news2024/11/16 13:47:37

目录

1. 序列化和反序列化的简单介绍

2. 使用 json 组件完成数据的序列化和反序列化

1. 安装 jsoncpp 组件

2. 序列化

3. 反序列化



Linux网络编程✨ 

1. 序列化和反序列化的简单介绍

序列化:将一个结构体数据转化为字符串数据;

反序列化:将一个字符串数据转化为结构体数据;

你和你的朋友使用QQ程序进行通信例子:

当你向你的朋友发送一个消息时,这个消息其实是一个结构化的数据,包含昵称、头像、消息内容、时间等信息。这种结构化的数据是不便于网络传输的,因此在网络传输前,要进行一个序列化的过程:将这个结构化的数据转化成为一个长的 “字符串” 在网络中传输。当你的朋友收到你的信息前,这个 “字符串” 的数据要进行一个反序列化的过程,将这个 “字符串” 数据转化成为一个结构化的数据,更好的进行一个界面的显示。

序列化和反序列化的原因?

1. 序列化的数据方便网络的传输;

2. 反序列化的数据方便用户的通信;

3. 将应用和网络进行了解耦 ;

2. 使用 json 组件完成数据的序列化和反序列化

1. 安装 jsoncpp 组件

使用 json 组件的话我们要先使用如下命令对其进行安装:

sudo yum install -y jsoncpp-devel

出现如下字样则表示成功: 

2. 序列化

序列化有两种风格:StyledWriter、FastWriter

下面分别来看一下这两种序列化的结果;

StyledWriter:

源代码: 

#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>

//仅仅是为了解释序列化和反序列化

typedef struct request
{
    int x;
    int y;
    char op;
}request_t;

int main()
{
    //序列化的过程
    request_t req = {10, 20, '*'};
    //可以承装任何对象,json是一种kv式的序列化方案
    Json::Value root;
    root["datax"] = req.x;
    root["datay"] = req.y;
    root["operator"] = req.op;

    Json::StyledWriter writer;
    std::string json_string = writer.write(root);
    std::cout << json_string << std::endl;
    return 0;
}

实验结果:

编译的时候,要在后面加上 -ljsoncpp  告诉链接的是哪个库; 

FastWriter:

源代码:

#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>

//仅仅是为了解释序列化和反序列化

typedef struct request
{
    int x;
    int y;
    char op;
}request_t;

int main()
{
    //序列化的过程
    request_t req = {10, 20, '*'};
    //可以承装任何对象,json是一种kv式的序列化方案
    Json::Value root;
    root["datax"] = req.x;
    root["datay"] = req.y;
    root["operator"] = req.op;

    Json::FastWriter writer;
    std::string json_string = writer.write(root);
    std::cout << json_string << std::endl;
    return 0;
}

实验结果:

3. 反序列化

源代码:

#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>

//仅仅是为了解释序列化和反序列化

typedef struct request
{
    int x;
    int y;
    char op;
}request_t;

int main()
{
    //反序列化
    std::string json_string = R"({"datax":10,"datay":20,"operator":42})";
    Json::Reader reader;
    Json::Value root;

    reader.parse(json_string, root);

    request_t req;
    req.x = root["datax"].asInt();
    req.y = root["datay"].asInt();
    req.op = (char)root["operator"].asInt();

    std::cout << req.x << " " << req.op << " " << req.y << std::endl;
    return 0;
}

实验结果:

 如果上述文章对您有所帮助的话,还请点赞👍,收藏😉,关注🎈

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

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

相关文章

Mysql 学习(十)基于成本的优化 一

什么是成本 执行一个查询可以有不同的执行方案&#xff0c;优化器会选择一个成本比较低的方案去执行&#xff0c;但是现在有个疑问&#xff0c;MySQL的查询执行成本是哪些呢&#xff1f;主要有两方面组成&#xff1a; I/O成本&#xff1a;myisam和innodb存储引擎将数据和索引存…

盘点慢查询原因及优化方法

目录 一&#xff0c;前言二&#xff0c;准备type重点看 三&#xff0c;慢查询原因和解决1&#xff0c;sql未加索引2&#xff0c;索引失效3&#xff0c;limit深分页问题&#xff08;1&#xff09;limit深分页为什么会慢&#xff08;2&#xff09;深分页优化 4&#xff0c;in元素…

网安笔记 09 PKI PMI

PKI PMI PKI 公钥基础设施 public key infrastructure 遵循标准的&#xff0c;利用公钥理论和技术建立的提供安全服务的基础设施 **目的&#xff1a;**身份认证&#xff0c;点滴信息不完整&#xff0c;不可抵赖&#xff0c;提供可靠安全服务 **任务&#xff1a;**可信任数字…

【发表案例】智能传感类、持续学习模型、计算建模、边缘计算等领域SCI,最快仅1个月14天录用

3区智能传感类SCI&EI 【期刊简介】IF:1.5-2.0&#xff0c;JCR3区&#xff0c;中科院4区 【检索情况】SCI&EI 双检&#xff0c;正刊 【征稿领域】智能信号处理技术在基于机器学习中遥感相关的应用研究 录用案例&#xff1a;2个月零5天录用 2023.04.28 | Accept 20…

OpenPCDet系列 | 7.PointPillars模型测试KITTI数据集流程解析

文章目录 模型的测试流程1. AnchorHeadTemplate.generate_predicted_boxes部分2. Detector3DTemplate.post_processing部分3. KittiDataset.generate_prediction_dicts部分4. KittiDataset.evaluation部分模型的测试流程 对于模型来说,训练过程是为了计算构建损失训练模型的参…

小程序安全架构分析

小程序大家已经再熟悉不过了&#xff0c;就是一种在移动操作系统中运行的轻量级应用程序&#xff0c;小程序发展这么多年来&#xff0c;是中国 IT 行业里为数不多的能够真正影响到普通程序员的创新成果。 当然随着小程序的流行&#xff0c;小程序的各个方面都是开发者讨论的热…

20230503 - 二叉树2 | 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

1、二叉树的层序遍历 二叉树的层序遍历&#xff0c;就是图论中的广度优先搜索在二叉树中的应用&#xff0c;需要借助队列来实现&#xff08;此时又发现队列的一个应用了&#xff09;。 来吧&#xff0c;一口气打十个&#xff1a; 102.二叉树的层序遍历 class Solution {pub…

一心报国的西工大网安人走出新手村

大二下学期5月5日晚上&#xff0c;西工大长安校区教学西楼&#xff0c;作为一名网安专业本科生&#xff0c;从大一便立志学好网安知识&#xff0c;报效祖国&#xff0c;却苦于没有优秀学习资源&#xff0c;就把这事儿拖到了大二&#xff0c;最近上了一门专业课&#xff0c;如同…

Wireshark抓包:详解TCP四次挥手报文内容

一、详解tcp四次挥手 刚才用图解释了tcp四次挥手的过程。用wireshark抓一个包&#xff0c;进行详细的分析。 1.客户端发的第一个释放连接的请求 这是抓的包&#xff0c;然后过滤出来的&#xff0c;看下最后的阶段&#xff0c;是要开始释放一个链接了。这里是第一个fin&#…

PSP - 适配不同来源的 AlphaFold2 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

如何快速构建 Zabbix 原生高可用?

Zabbix Meetup成都站议程 14:30 《如何快速构建 Zabbix 原生高可用》 周松&#xff0c;Zabbix 大中华区培训师&#xff0c;架构师 15:00 《基于 Zabbix 开发的拨测平台–OneMonitor》 唐荣&#xff0c;社区用户 15:30 《Zabbix 与信创生态的融合》 侯健&#xff0c;上海宏…

VS安装项目生成错误提示:SQL Server 2008 R2 SP2 Management Studio

错误提示内容&#xff1a; 原因是在Visual Studio XXXX中创建设置时遇到错误。 提示错误信息&#xff1a; 0:Watson 1:1304 2:StreamSupportFiles 3:streamBinaryToDisk 4:5 5.e:lsql10 main tlsgllsetupidarwinsglcastublstreamca.cpp 6:238 7:sglcastub.dll 8:sglrun.msi 点…

Python每日一练(20230510) 石子游戏 VII\VIII\IX

目录 1. 石子游戏 Stone Game VII 2. 石子游戏 Stone Game VIII 3. 石子游戏 Stone Game IX &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 石子游戏 Stone Game VII 石子游戏中&…

Android音视频开发之音频录制和播放

1.封装音频录制工具类&#xff1a; public class RecorderAudioManagerUtils {private static volatile RecorderAudioManagerUtils mInstance;public static RecorderAudioManagerUtils getInstance() {if (mInstance null) {synchronized (RecorderAudioManagerUtils.class…

【连续介质力学】简介

什么是连续介质力学 连续介质力学的假设 连续介质力学的流体性质&#xff1a;质量密度&#xff0c;压强和速度假设为连续函数 将原子系统看作是连续 分子的平均自由程&#xff1a; Λ \Lambda Λ 物理特征长度&#xff1a; l c l_c lc​ 克劳森数&#xff08;Knudsen number…

数字城市发展,哪些技术可以深度应用

说到数字城市、智慧城市大家都会觉得经常在耳边听到&#xff0c;但是要确切的说出具体的概念还是有一些难度的。具体来讲&#xff1a;数字城市是一个集合多种技术的系统&#xff0c;以计算机技术、多媒体技术和大规模存储技术为基础&#xff0c;以宽带网络为纽带&#xff0c;运…

Grafana 系列-统一展示-5-AWS Cloudwatch 仪表板

系列文章 Grafana 系列文章 &#x1f44d;️强烈推荐 强烈推荐使用 GitHub 上的 monitoringartist/grafana-aws-cloudwatch-dashboards 仪表板。该 repo 有一系列 AWS 资源的仪表板&#xff0c;包括但不限于&#xff1a; EC2EBSAPI GWAutoscalingBillingEKSLambdaLogsRDSS3…

Unity3D :树

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 树 可使用类似于绘制高度贴图和纹理的方式在地形上绘制树。然而&#xff0c;树是从表面生长的 3D 对象实体。Unity 使用优化&#xff08;比如针对远处树的公告牌&#xff09;来保持…

关于 std::condition_variable

一. std::condition_variable是什么&#xff1f; std::condition_variable 是 C 标准库提供的一个线程同步的工具&#xff0c;用于实现线程间的条件变量等待和通知机制。 条件变量的发生通常与某个共享变量的状态改变相关。 在多线程编程中&#xff0c;条件变量通常和互斥锁…

Mac执行ruby命令提示 dyld: Library not loaded等类似问题解决方案

说一下为啥会遇见这么个问题&#xff0c;我在给一个xcode项目添加podfile的时候&#xff0c;在终端执行了pod init命令&#xff0c;随即给了我一个如下图的提示&#xff08;报错信息一样的&#xff0c;执行pod的命令早就被解决问题过程中频繁的下载过程刷上去了。。。&#xff…