网站开发形式,牛肉煲的做法,云南建设厅网站资质证书查询,51CTO学院个人网站开发视频作者简介#xff1a; 一个平凡而乐于分享的小比特#xff0c;中南民族大学通信工程专业研究生在读#xff0c;研究方向无线联邦学习 擅长领域#xff1a;驱动开发#xff0c;嵌入式软件开发#xff0c;BSP开发 作者主页#xff1a;一个平凡而乐于分享的小比特的个人主页…作者简介 一个平凡而乐于分享的小比特中南民族大学通信工程专业研究生在读研究方向无线联邦学习 擅长领域驱动开发嵌入式软件开发BSP开发 作者主页一个平凡而乐于分享的小比特的个人主页 文章收录专栏网络socket编程之温度采集智能存储与上报项目本专栏为网络socket编程之温度采集智能存储与上报项目技术简介实现流程分析 项目源码https://gitee.com/TJF865975/project1_ds18b20README部分包含项目功能及实现欢迎大家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(truefalse)null。
1.2.1 对象Object
形式 {key:value, key:value…} keystring类型 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位置为10~6位用来描述Length值占用的字节数然后直将Length值转为byte后附在其后如 Value大小占234个字节11101010,由于大于127这时Length需要使用两个字节来描述10000001 11101010
2.2 编码方法
将类型type用htonl转换为网络字节顺序指针偏移4将长度length用htonl转换为网络字节顺序指针偏移4若值value数据类型为int、char、short则将其转换为网络字节顺序指针偏移4若值为字符串类型写进后指针偏移length
重复上述三步继续编码后面的 TLV 单元。
2.3 解码方法
读取type 用ntohl转换为主机字节序得到类型指针偏移4读取lengh用ntohl转换为主机字节序得到长度指针偏移4根据得到的长度读取value若value数据类型为int、char、short用ntohl转换为主机字节序指针偏移4若value数据类型为字符串类型指针偏移length
重复上述三步继续读取后面的 TLV 单元。