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

【数据交换格式】网络socket编程温度采集智能存储与上报项目技术------JSON、TLV

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习
擅长领域:驱动开发,嵌入式软件开发,BSP开发
作者主页:一个平凡而乐于分享的小比特的个人主页
文章收录专栏:网络socket编程之温度采集智能存储与上报项目,本专栏为网络socket编程之温度采集智能存储与上报项目技术简介,实现流程分析
项目源码:https://gitee.com/TJF865975/project1_ds18b20,README部分包含项目功能及实现,欢迎大家Watch、Star、Fork。
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

1.JSON格式

1.1 JSON格式简介

JSON是一种独立于语言和平台、轻量级的数据交换格式,全称JavaScript对象表示法(JavaScript Object Notation)。起初来源于JavaScript这门语言,后来随着使用的广泛,几乎每门开发语言都有处理JSON的API。

优点:易于人的阅读和编写,易于程序解析与生产。比XML更小、更快、更易解析。
JSON样例:首先一个花括号{},整个代表一个对象,同时里面是一种Key-Value的存储形式,以逗号进行分割。

{"name": "林黛玉","sex": "女","parents": [{"father": "林如海","mother": "贾敏"}],"husband": null,"unmarried": true,"friends": [{"sex": "男","name": "贾宝玉"},{"sex": "女","name": "史湘云"},{"sex": "女","name": "贾探春"}]
}

1.2 JSON数据类型

数据结构:对象(Object)、数组(Array)。
基本类型:string(在双引号中),number(整点或浮点型),Boolean(true,false),null。

1.2.1 对象Object

形式: {key:value, key:value…}
key:string类型;
value:任何基本类型或数据结构;

1.2.2 Array

形式: [value, value…]
value:任何基本类型或数据结构。
实例:

{"name": "林黛玉","sex": "女","talent": ["诗","棋",{"乐器": "古琴"}]
}

2.TLV格式

2.1 TLV格式简介

2.1.1 TLV格式演变

通常需要处理类似字节流的流式数据,那么会面临一个问题就是当数据流源源不断的传输,如何知道数据流中从哪个点开始到那个点结束是一个完整的数据呢?
定长记录
定义每个记录的固定长度。读方读取到了固定的长度之后,即认为获得了完整数据,每读取固定长度之后,就认定为获取了完整数据。
在这里插入图片描述
缺点:固定长度必须取最大数据大小,如果其中多数的数据比较的小,那么会造成空间浪费。

变长记录+分隔符
定义每个记录的固定长度。读方读取到了固定的长度之后,即认为获得了完整数据,每读取固定长度之后,就认定为获取了完整数据。
在这里插入图片描述
定长长度+变长记录
定义一个固定长度的块来作为记录头,该记录头用来存放后面记录的长度。记录头后始终跟着该块描述的长度的记录;每个记录头的长度都是固定的。
读方读取了记录头获取了记录长度,再读取对应长度的数据获得完整数据。
在这里插入图片描述

TLV格式
在这里插入图片描述
TLV是一种可变格式,意思就是:
Type类型, Lenght长度,Value值;
Type和Length的长度固定,一般那是2、4个字节(这里统一采用4个字节);
Value的长度有Length指定;

基于定长长度+边长记录的方式,多加了一个类型字段。这样读方就可以根据不同类型的记录做不同的处理逻辑。
在这里插入图片描述
TLV优缺点:
优点:记录长度动态,节省空间与处理时间;可以针对不同类型的记录做不同的处理,可扩展性、简单易学、 跨语言特性
缺点:因为其增加了2个额外的冗余信息,tag 和len,特别是如果协议大部分是基本数据类型int ,short, byte. 会浪费几倍存储空间。另外Value具体是什么含义,需要通信双方事先得到描述文档,即TLV不具备结构化和自解释特性。

2.1.2 定长不定长

描述Value部分所占字节的个数,编码格式分两类:定长方式(DefiniteForm)和不定长方式(IndefiniteForm),其中定长方式又包括短形式与长形式。

  • 短形式:
    在这里插入图片描述
    字节第7位为0,表示Length使用1个字节即可满足Value类型长度的描述,范围在0~127之间的。
  • 长形式:
    在这里插入图片描述
    即Value类型的长度大于127时,Length需要多个字节来描述,这时第一个字节的第7位置为1,0~6位用来描述Length值占用的字节数,然后直将Length值转为byte后附在其后,如: Value大小占234个字节(11101010),由于大于127,这时Length需要使用两个字节来描述,10000001 11101010

2.2 编码方法

  1. 将类型type用htonl转换为网络字节顺序,指针偏移+4
  2. 将长度length用htonl转换为网络字节顺序,指针偏移+4
  3. 若值value数据类型为int、char、short,则将其转换为网络字节顺序,指针偏移+4;若值为字符串类型,写进后,指针偏移+length

重复上述三步,继续编码后面的 TLV 单元。

2.3 解码方法

  1. 读取type 用ntohl转换为主机字节序得到类型,指针偏移+4
  2. 读取lengh用ntohl转换为主机字节序得到长度;指针偏移+4
  3. 根据得到的长度读取value,若value数据类型为int、char、short,用ntohl转换为主机字节序,指针偏移+4;若value数据类型为字符串类型,指针偏移+length

重复上述三步,继续读取后面的 TLV 单元。

相关文章:

【数据交换格式】网络socket编程温度采集智能存储与上报项目技术------JSON、TLV

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...

IP地址定位技术在各领域的作用

IP地址定位是通过确定IP地址的物理位置来定位一个设备的技术,它在现代社会的多个领域中都有着广泛的应用。以下将详细探讨IP地址定位的应用场景,以期对读者有所启发。 首先,在网络安全领域,IP地址定位发挥着至关重要的作用。网络…...

代码随想录 538. 把二叉搜索树转换为累加树

题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件&a…...

JavaWeb--前端--01HTML和CSS

文章目录 1 前端开发介绍2 开发工具3 文档查阅4 VSCode的插件 1 前端开发介绍 Web标准也称为网页标准,由一系列的标准组成,大部分由W3C( World Wide Web Consortium,万维网联盟)负责制定。由三个组成部分:…...

Oracle SQL中的DECODE函数与NVL函数:区别与应用场景详析

Oracle SQL中的DECODE函数与NVL函数:区别与应用场景详析 引言1. NVL函数简介与使用示例2. DECODE函数简介与使用示例3. NVL与DECODE函数的区别4. 使用场景举例结论 引言 在Oracle数据库开发和数据分析过程中,DECODE函数和NVL函数都是非常实用且常见的工具…...

算法设计与分析实验报告c++实现(N皇后问题、卫兵布置问题、求解填字游戏问题、图的m着色问题)

一.N皇后问题 基本原理和思路: 从一条路往前走,能进则进,不能进则退回来,换一条路再试。在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一…...

深入探索Linux中的libgdbus:GDBus库的应用和实现

引言 在Linux系统中,DBus是一种高效的进程间通信(IPC)机制,广泛应用于桌面环境和系统服务之间的通信。GDBus是基于GLib库的DBus实现,作为libgdbus的一部分提供。它旨在提供一种简洁、高效的方式来实现DBus通信。通过深…...

MacOS下Qt 5开发环境安装与配置

最近笔者在MacOS中使用Qt Creator开发Qt程序时遇到了一些问题,在网上查了不少资料,都没有找到解决方案,只有自己进行研究摸索了,今天晚上终于将目前遇到的问题全部解决了,特记录下来分享给大家。 笔者使用的是MacOS 1…...

jquery 实现倒计时

$(".tableText").click(function () { var time 60; var timer setInterval(function(){ time--; $(".tableText").text("("time"秒)重发"); if(time0){ clearI…...

MYSQL 5.7重置root密码

Mysql 5.7重置root密码 如果您忘记了MySQL 5.7的root密码,可以通过以下步骤重置: 停止MySQL服务。在命令行中输入以下命令: systemctl stop mysqld启动MySQL服务并跳过授权表。在命令行中输入以下命令: mysqld_safe --skip-gra…...

博客永久链接与计数

概述 工欲善其事,必先利其器。 对自己的博客不好用不满意很久了,但是这几年太懒。想趁着放假弄一下吧,发现几年没动,版本升级后很多东西变了,折腾了一下午效果不太理想。先记录一下。 问题 博客链接中有中文&#x…...

基于 RisingWave 和 ScyllaDB 构建事件驱动应用

概览 在构建事件驱动应用时,人们面临着两大挑战:1)低延迟处理大量数据;2)实现流数据的实时摄取和转换。 结合 RisingWave 的流处理功能和 ScyllaDB 的高性能 NoSQL 数据库,可为构建事件驱动应用和数据管道…...

mysql8.0高可用集群架构实战

MySQL :: MySQL Shell 8.0 :: 7 MySQL InnoDB Cluster 基本概述 InnoDB Cluster是MySQL官方实现高可用读写分离的架构方案,其中包含以下组件 MySQL Group Replication,简称MGR,是MySQL的主从同步高可用方案,包括数据同步及角色选举Mysql Shell 是InnoDB Cluster的管理工具,用…...

GRE/MGRE详解

GRE GRE:通用路由封装,是标准的三层隧道技术,是一种点对点的隧道技术; 该技术可以实现不同的网络之间安全的访问; 如上:可以使用该技术搭建一条专线,实现公司A与分公司A1之间相互通信&#xf…...

蓝桥杯(填空题)

十四届 B组 日期统计(暴力枚举) 数据 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3…...

vim快捷指令

Vim是一款强大的文本编辑器,它提供了许多快捷指令来提高编辑效率。以下是一些常用的Vim快捷指令: 移动光标: h 向左移动一个字符j 向下移动一行k 向上移动一行l 向右移动一个字符w 跳到下一个单词的开头b 跳到前一个单词的开头e 跳到当前单词…...

LINUX 下IPTABLES配置详解

-t<表>&#xff1a;指定要操纵的表&#xff1b; -A&#xff1a;向规则链中添加条目&#xff1b; -D&#xff1a;从规则链中删除条目&#xff1b; -i&#xff1a;向规则链中插入条目&#xff1b; -R&#xff1a;替换规则链中的条目&#xff1b; -L&#xff1a;显示规则链中…...

CentOS 网卡ifcfg-eth0 ping不通外网(www.baidu.com)

1、如果确认好就直接激活网卡&#xff01; ifup eth0 2、慢慢找&#xff1a; cd /etc/sysconfig/network-scripts/ ls 找到你的网卡是啥&#xff0c;这里网卡是 ifcfg-eth0 执行1就好了&#xff01;...

【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)

&#x1f525;个人主页&#xff1a;Forcible Bug Maker &#x1f525;专栏&#xff1a;C 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性及用法 析构函数 概念 析构函数的特性及用法 结语 前言 本篇主要内容&#xff1a;类的6个默认成员函数中的构造函…...

【ZZULIOJ】1063: 最大公约与最小公倍(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 输入两个正整数&#xff0c;输出其最大公约数和最小公倍数。 输入 输入两个正整数n和m&#xff08;n,m<1000000)。输入保证最终结果在int范围内。 输出 输出两个整数&#xff0c;用空格…...

遍历列举俄罗斯方块的所有形状

以前玩俄罗斯方块的时候&#xff0c;就想过一个问题&#xff0c;为什么俄罗斯方块就这7种形状&#xff0c;还有没有别的形状&#xff1f;自己也在纸上画过&#xff0c;比划来比划去&#xff0c;确实就这几种形状。 继续思考一下&#xff0c;那假如是3个块组合的形状&#xff0…...

将Visio绘图导出PDF文件,使其自适应大小,并去掉导入Latex的边框显示

问题描述 将Visio绘图导成pdf文件&#xff0c;首先在Visio绘图如下&#xff1a; 如果直接导出或者另存为pdf文件&#xff0c;则会发现pdf文件是整个页面大小&#xff0c;而不是图片大小。而且在导入latex等排版工具现实时&#xff0c;会显示边框。 问题解决 1.调整Visio中的页…...

android支付宝接入流程

接入前准备 接入APP支付能力前&#xff0c;开发者需要完成以下前置步骤。 本文档展示了如何从零开始&#xff0c;使用支付宝开放平台服务端 SDK 快速接入App支付产品&#xff0c;完成与支付宝对接的部分。 第一步&#xff1a;创建应用并获取APPID 要在您的应用中接入支付宝…...

Mac 下 Python+Selenium 自动上传西瓜视频

背景 研究下 PythonSelenium 自动化测试框架&#xff0c;简单实现 Mac 下自动化批量上传视频西瓜视频并发布&#xff0c;分享给需要的同学&#xff08;未做过多的异常处理&#xff09;。 脚本实现 首先通过手工手机号登录&#xff0c;保存西瓜视频网站的 cookie 文件 之后加载…...

六:ReentrantLock —— 可重入锁

目录 1、ReentrantLock 入门2、ReentrantLock 源码解析2.1、构造方法&#xff1a;默认为非公平锁2.2、三大内部类2.2、lock()&#xff1a;加锁【不可中断锁】2.2.1、acquire() 方法 —— AQS【模板方法】2.2.2.1 tryAcquire() 方法 —— AQS&#xff0c;由子类去实现2.2.2.2. a…...

一种驱动器的功能安全架构介绍

下图提供了驱动器实现安全功能的架构 具有如下特点&#xff1a; 1.通用基于总线或者非总线的架构。可以实现ethercat的FSOE&#xff0c;profinet的profisafe&#xff0c;或者伺服本体安全DIO现实安全功能。 2.基于1oo2D架构&#xff0c;安全等级可以达到sil3。 3.高可用性。单…...

紫光展锐T610平台_4G安卓核心板方案定制开发

紫光展锐T610核心板配备Android 11操作系统&#xff0c;采用12nm制程工艺。该处理器CPU由2颗基于Cortex-A75架构的大核心和6颗基于Cortex-A55架构的小核心组成&#xff0c;最高主频为1.8GHz。GPU采用的是614.4MHz的Mali G52&#xff0c;可以流畅播放2400*1080分辨率视频&#x…...

C++11 设计模式4. 抽象工厂(Abstract Factory)模式

问题的提出 从前面我们已经使用了工厂方法模式 解决了一些问题。 现在 策划又提出了新的需求&#xff1a;对于各个怪物&#xff0c;在不同的场景下&#xff0c;怪物的面板数值会发生变化&#xff0c; //怪物分类&#xff1a;亡灵类&#xff0c;元素类&#xff0c;机械类 …...

第8周 Python面向对象编程刷题

单击题目&#xff0c;直接跳转到页面刷题&#xff0c;一周后公布答案。加入QQ群701657573&#xff0c;随时答疑交流。 218&#xff1a;类对象属性219&#xff1a;坐标对象相加220&#xff1a;计算周长221&#xff1a;学生分数总和222&#xff1a;车辆类中创建引擎类对象223&am…...

【学习心得】神经网络知识中的符号解释②

我在上篇文章中初步介绍了一些神经网络中的符号&#xff0c;只有统一符号及其对应的含义才能使我自己在后续的深度学习中有着一脉相承的体系。如果对我之前的文章感兴趣可以点击链接看看哦&#xff1a; 【学习心得】神经网络知识中的符号解释①http://t.csdnimg.cn/f6PeJ 一、…...

做app模板下载网站/seo查询百科

定义和用法 <audio> 标签定义声音&#xff0c;比如音乐或其他音频流。 示例代码:<audio src"someaudio.wav">您的浏览器不支持 audio 标签。</audio> 提示和注释 提示&#xff1a;可以在开始标签和结束标签之间放置文本内容&#xff0c;这样老的浏…...

网站建设的步骤/今日头条官网

如果要给C11颁一个“最令人困惑新词”奖&#xff0c;constexpr十有八九会折桂。当用于对象上面&#xff0c;它本质上就是const的加强形式&#xff0c;但是当它用于函数上&#xff0c;意思就大不相同了。有必要消除困惑&#xff0c;因为你绝对会用它的&#xff0c;特别是当你发现…...

网站制作多少钱400/企业培训体系搭建

众包测试 什么是众包测试&#xff1f; 众包测试使用的是众多专家测试人员进行手动测试。测试人员旨在发现错误、记录可重现的步骤并提供错误报告。 众包测试有什么好处&#xff1f; 与内部 QA 相比&#xff0c;众包测试是一种具有成本效益的选择。 由于可用的测试人员数量众…...

公众号链接的手机网站怎么做/百度seo快排软件

前段时间在哔哩哔哩上刷到了一个资源分享的博主&#xff0c;做一个前端学习资源总结&#xff0c;有兴趣学习或者前端查漏补缺的小伙伴去看看 哔哩哔哩的博主地址&#xff1a;技术胖的个人空间_哔哩哔哩_Bilibili前端知识总结&#xff1a;前端知识图谱B站视频整合: 前端知识图谱…...

jsp企业网站开发前期报告/新浪舆情通

58 同城 iOS 客户端搜索模块组件化实践- http://blog.csdn.net/csdnnews/article/details/78088447 最受欢迎的开源项目资讯&#xff08;iOS&#xff09;- http://www.csdn.net/tag/%E6%9C%80%E5%8F%97%E6%AC%A2%E8%BF%8E%E7%9A%84%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/new…...

信主网站/广告开户

题目&#xff1a;用*号输出字母C的图案。 程序分析&#xff1a;可先用*号在纸上写出字母C&#xff0c;再分行输出。 程序代码&#xff1a; #include <stdio.h> int main() {printf("用 * 号输出字母 C!\n");printf(" ****\n");printf(" *\n&…...