当前位置: 首页 > 科技观察

OpenHarmony啃论文成长计划---浅谈连载规范

时间:2023-03-13 01:41:54 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com大家好!我是深圳科技大学FSR实验室的同学,题目FFH是FSRlabForHarmony!而我也正在参与OpenHarmony从论文到开源提交研究的成长计划,我们会在未来继续记录在这个社区中的学习心得和心得。简介在涉及网络的远程通信过程中,传输数据的序列化是不可避免的。序列化实际上是将要传输的数据和数据结构转换成位串,反序列化是将位串转换回原来的数据和对应的数据结构。序列化其实有规范的分类,一种是TextualandBinarySerializationSpecifications,一种是Schema-lessandSchema-drivenSerializationSpecifications。下面我们简单的看一下这两个规范的分类。TextandBinarySerializationSpecifications(文本和二进制序列化规范)如果序列化规范生成的位串对应文本编码中的字符序列,比如对应ASCII、EBCDIC/CCSID037或UTF-8,则序列化规范为称为文本序列化规范(TextualSerializationSpecifications),否则序列化规范称为二进制序列化规范(BinarySerializationSpecifications)。下图是使用这两种规范对3.1415926535进行序列化的示例:文本序列化规范(TextualSerializationSpecifications)我们可以将文本序列化规范视为特定文本编码(如UTF-8)规则内的一组约定。用于处理文本编码格式的计算机工具可以轻松处理相应的序列化位串。例如,上图将3.1415926535序列化为两个规格。文本表示法将十进制数字编码为96位长的数字字符序列。可以使用相应的文本编辑器(例如这里的UTF-8编码格式的编辑器)轻松检查和处理我的序列化位字符串。,这更具可读性。二进制序列化规范(BinarySerializationSpecifications)仍然是上图中用二进制规范3.1415926535序列化的。看图中序列化的位串,二进制序列化表示法是根据符号、指数和尾数对一个十进制数进行编码。生成的位串只有32位长。差异和应用从序列化数据占用的空间来看——二进制序列化规范比文本序列化规范表示小三倍。但是,我们不能使用一般的基于文本的工具来处理它,二进制序列化规范需要更详细的协议来定义序列化二进制流的每个字节的含义。因为这种规范占用的数据空间比较小,传输效率比较高,但是可读性比较低,一般用于对数据传输效率要求非常高的场景。JSON、XML、BSON和ProtocolBuffers是常用的序列化方法。前两者基于文本序列化规范,后两者基于二进制序列化规范。但是,无论是文本格式还是二进制格式,存储的都是二进制。Schema-lessandSchema-drivenSerializationSpecifications如果序列化规范生成的位串可以在事先不知道其原始数据及其数据结构的情况下进行反序列化,则称该规范为模式序列化规范。否则,它被称为模式驱动的序列化规范。下图是两个规范中序列化两个hashmap的例子:模式驱动序列化规范(Schema-drivenSerializationSpecifications)Schema-drivenSerializationSpecifications的特点是当我们传递数据的时候,我们需要在数据结构上达成一致预先传递的信息,并将结构信息编码成序列化生成的位串。例如,上面的例子是序列化两个映射。{"latitude":48858093,"longitude":2294694}schema-driven描述的位串(底部)除了作为整数前缀的地图长度,省略了大部分自描述信息。如果事先没有约定相关的源数据结构信息,则接收方无法处理模式驱动的位串,即不知道如何转换为原始数据结构。无模式序列化规范(Schema-lessSerializationSpecifications)仍然是上图中的一个例子。schema-less序列化规范(上)是自描述的,通过不同的属性区分原始数据结构和原始数据的信息。因此,数据接收方可以在没有事先约定的情况下处理序列化的比特串。区别与应用从上面的介绍中我们可以看出,模式驱动的序列化规范在序列化之后会生成一个非常节省空间的位串。因此,具有高效网络需求的系统倾向于采用模式驱动的序列化规范。模式驱动的序列化规范通常与空间效率有关,因此往往是二进制的。但是,还提出了基于文本的JSON兼容模式驱动的序列化规范。上图显示了采用不同的序列化技术,分别对相同数据序列化后的位串信息量进行排序。(越往右,信息量越小)。我们可以根据上图直观的看到序列化后的位串包含的信息量,来对比schema-free和schema-driven的序列化规范。最左边的处理方式将信息量最大的位串序列化,是无模式序列化规范(Schema-lessSerializationSpecifications),如BSON、Smile、FlexBuffers等,因为原始数据和信息量大对其结构的描述。最右边的信息量最少,比如ASN.1,因为他们在规范中事先约定了很多结构信息,所以不需要写入到序列化的位串中。存在是合理的。这些模式没有最好或最差之分。每种模式都可以在特定场景中起到相应场景所需要的作用。更多信息请访问:与华为官方共建的鸿蒙技术社区https://ost.51cto.com