序列化与反序列化

1、计算机编码

(1)理解比特、字节、字符
(2)字节对齐
依赖编译器,对数据块进行划分,以便于数据读取。给定奇偶位,读取数据方式是不同的。
(3)数字的表示
原码,反码,补码
反码:正数反码与原码一致,负数最高位符号位不变,其他位取反
补码:正数的补码与原码一致,负数的补码在反码的基础上+1

====>在计算中,数的运算是运用补码进行的。

(4)Big-Endian与Little-Endian
网络传输中使用Big-Endian方法
bit发送中,串口通讯LSB优先发送,IIC集成电路系统总线是MSB优先发送,现代计算机为多字节并行处理,所以不用关心bit序列问题。

2、字符编码

(1)字符集与字符编码
(2)英文字符集与编码
(3)中文字符集与编码
(4)Unicode字符集与编码
Unicode字符集为全世界的字符提供了一个唯一的编码
UTF32:直接转成二进制,存储长度为4字节,考虑是Big-Endian还是little-Endian
UTF16:采用变长字节进行表示编码
1)对于编码在U+0000到U+FFFF之间的字符,用2个字节来表示
2)对于编码在U+10000到U+10FFFF之间的字符,用4个字节表示
UTF8:针对Unicode编码的可变长度字符编码实现形式,编码长度为1-4字节
物理存储问题解决方案
使用举例:
string str = “中”;
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
for(int i = 0; i < bytes.length;++i){
printf(”%x",bytes[i]);
//依次输出e4 b8 ad

3、序列化与反序列化

(1)技术背景
如何将程序中的结构体、对象等结构化内存对象转换成为扁平的二进制流?如何将二进制流还原为结构化内存对象?为了解决这些问题,出现了序列化和反序列化技术。
(2)技术特征
a、成熟度 :社区是否成熟,是否能及时跟进issue并解决bug
b、扩语言能力:扩语言能力是序列化与反序列化技术的核心指标之一,根据项目的实际需求是否需要跨语言。
c、易用性:门槛要低,接口要容易理解
d、扩展性:在增减字段的过程中,是否方便,是否对系统的数据存储、数据访问造成影响,具有向后兼容性。扩展性也是序列化和反序列化的核心指标之一。
(3)IDL序列化引擎
IDL(Interface Description Language,接口描述语言)
非IDL技术方案:json xml等
IDL序列化方案:Thrift 、Protocol Buffer、Avro等

1、Json

Json是一种基于JavaScript的轻量级数据交换格式,既能被机器理解,又便于用户阅读和编写。Json从用完全独立于语言的文本格式,支持c,c++、c#、java、JavaScript、Python等,这些特性使Json成为理想的跨语言数据交换方案。
在实际应用开发中,Json被广泛应用于数据传输、数据存储等场景。
下面内容包括:
(1)Json结构
(2)c++ 进行序列化
(3)开源库对比

1.1、json结构
Json包括另种数据结构:一种是键-值结构,一种是数据结构,数据结构包括了多个值。
1.1.1、json值类型
json支持的所有值类型

值类型对应c++类型
boolbool
numberint,double等
stringstring
object键-值结构,递归概念
array数组结构,数组元素是任意类型值,递归的概念
nullnull

1.1.2、Json语法
包括键-值结构和数组结构的例子
{
“name” : “jack”,
“age” : 10,
“height” : 1.75,
“is_male” : true,
“favarites” : [“reading”, “football”},
“children” : [{“name” : “lucy”, “gender”:“femalle”},{“name” : “lily”, “gender” : “female”}]
“school” : {“name” : “city school”, “class” :“m5”}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值