System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种二进制序列化方法技术_技高网

一种二进制序列化方法技术

技术编号:40296248 阅读:7 留言:0更新日期:2024-02-07 20:45
本发明专利技术提供了一种二进制序列化方法,包括S1:基于字段类型定义XML格式接口;S2:根据所述XML格式接口,构建二进制序列化算法和反序列化算法;S3:从缓存中获取数据字段,读取数据字段,基于XML格式接口,根据构建的二进制序列化算法和反序列化算法实现数据传输。本发明专利技术的序列化方法,对字段类型的判断和对字段位置的计算均在编译期进行,节省了程序运行时的算力开销,同时基于XML格式结构,同时实现了大小端序列化和反序列化逻辑的模块化,降低对人员的技术要求,提高了编码效率。

【技术实现步骤摘要】

本专利技术涉及通信,特别涉及一种二进制序列化方法


技术介绍

1、序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区,之后可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。在军工领域中,各软硬件之间的通信机制不同于当下的互联网应用,为保证存储空间的高利用率和数据传输的高效率,军工软硬件的通信方式采用二进制比特流,通过二进制序列化将对象转换为比特流。

2、在计算机发展历史上,因不同处理器的硬件架构不同,在数据存储格式上有大端序和小端序两种存储模式,两种存储模式对应的比特流结构存在差异。编码人员在定义结构体时,会根据大小端序定义不同结构体,其结构体内部字段顺序不同,尤其是在位域跨越多字节的情况下,结构体内部字段顺序会有很大差异,因此需要编码人员深刻理解在大小端模式下,字节和位域的定义顺序及其存储顺序,才能正确定义结构体。

3、现有的二进制序列化方式包括三种,一种是由编码人员根据接口文件和实际端序定义结构体,工作流程如图5所示。对于定长数据来说可以套用对应端序的结构体,直接取址,无需编码人员编写端序转换过程和序列化过程,处理速度很快。但接口逻辑和业务逻辑耦合程度高,并且对编码人员技术要求较高,需要编码人员深刻理解计算机大小端的存储方式,否则容易出错;特别是在位域跨越多个字节的情况下,结构体字段顺序难以明确,正确定义结构体的过程将变得十分艰难。而对于变长数据来说,无法直接取址,仍需要编码人员编写大小端序转换过程和序列化过程。如图6所示,另一种是在程序运行时对数据字段的类型进行分支判断,编码人员在不同分支手动实现不同的序列化方法。该方式在极小体量的软件开发中,实现较为简单明了;但在大体量的软件开发中,该方式代码结构臃肿冗余、架构层次模糊,可维护性和可扩展性存在问题,且分支判断太多,处理性能低下,无法满足诸如高速数据传输这一类的应用场景。如图7所示,还有一种是对数据字段进行高层次抽象,提取公有部分作为基类,由基类提供序列化接口,并把不同类型的数据字段作为子类,通过子类实现基类的序列化接口,在程序运行时,通过对象的多态机制,自动调用子类的序列化方法。该方式架构层次清晰,可维护性、可拓展性、可复用性高;但在数据密集的情况下,由于多态处理的时间成本累积叠加,导致运行效率低下;且对于每一个数据字段都需要创建一个类实例进行存储,造成了存储空间的浪费。


技术实现思路

1、为解决上述问题,本专利技术提供了一种二进制序列化方法,实现了基于xml描述的、利用编译期计算的、动态和静态结合的二进制序列化。

2、本专利技术提供了一种二进制序列化方法,具体技术方案如下:

3、s1:基于字段类型定义xml格式接口;

4、s2:根据所述xml格式接口,构建二进制序列化算法和反序列化算法;

5、s3:从缓存中获取数据字段,读取数据字段,基于xml格式接口,根据构建的二进制序列化算法和反序列化算法实现数据传输。

6、进一步的,所述定义xml格式接口,具体如下:

7、基于icd接口定义,对数据字段逐个字段依次定义为对应的xml节点。

8、进一步的,所述二进制序列化算法和反序列化算法,基于位掩码和移位操作采用跨字节位序处理进行构建。

9、进一步的,所述二进制序列化算法和反序列化算法,包括小端二进制序列化算法和反序列化算法,以及大端二进制序列化算法和反序列化算法。

10、进一步的,所述小端二进制序列化算法,具体执行逻辑如下:

11、从缓存中读取字段value,获取输入位数bitnum,并设定位起始位置bitstartpos;

12、基于输入位数,计算字节数bytenum;

13、若为四字节数据,则从低位至高位分别计算各字节对应数据位的值,更新位起始位置bitstartpos,并进行移位操作,依次处理获得各字节对应数据位的值;

14、若为多字节数据,则从低字节开始依次计算每个字节的值,进行移位操作,更新位起始位置bitstartpos,并处理获得每个字节的值;

15、若为单字节数据,更新位起始位置bitstartpos,并进行移位操作;

16、若为双字节数据,则分别计算低八位值和高八位值,更新位起始位置bitstartpos,并进行移位操作,依次处理获得低八位的值和高八位的值。

17、进一步的,所述小端二进制反序列化算法,具体执行逻辑如下:

18、输入缓存buffer,获取输入位数bitnum,并设定位起始位置bitstartpos;

19、基于输入位数,在编译期计算字节数bytenum;

20、设定字节掩码数组,判断字节数;

21、若为四字节数据,则分别计算各字节对应数据位的值,更新位起始位置bitstartpos,并计算字节起始位置byteindex和字节内位起始位置bitindex,读取缓存中数据字段的值,并基于字节掩码数组进行小端序列计算,依次将计算结果的值更新各字节对应数据位的值;

22、若为多字节数据,则从低字节开始依次计算每个字节的值,依次更新位起始位置bitstartpos,并基于字节掩码数组进行小端序列计算,更新每个字节的值;

23、若为单字节数据,则直接基于字节掩码数组进行小端序列计算,并记录结果值输出;

24、若为双字节数据,则读取低八位值和高八位值,更新位起始位置bitstartpos,并基于字节掩码数组进行小端序列计算,依次更新低八位值和高八位值。

25、进一步的,所述小端序列计算,具体过程如下:

26、获取当前的字节起始位置byteindex和当前的字节内位起始位置bitindex;

27、将当前字节的值与低位字节掩码数组中bitindex位的值进与运算,并进行右移位操作获得低八位值;将当前字节的值与高位字节掩码数组中bitindex位的值进行与运算,并进行左移位操作获得高八位值;

28、将低八位值赋值给缓存的byteindex字节,将高八位值赋值给缓存的byteindex+1字节。

29、进一步的,所述大端二进制序列化算法,具体执行逻辑如下:

30、从缓存中读取字段value,获取输入位数bitnum,输入缓存buffer,并设定位起始位置bitstartpos;

31、基于输入位数计算字节数bytenum,设定字节掩码数组,并判断字节数;

32、若为四字节数据,则从高位至低位分别计算各字节对应数据位的值,更新位起始位置bitstartpos,并对各字节对应数据位的值依次进行移位操作,依次处理获得各字节对应数据位的值;

33、若为多字节数据,则从高字节开始依次计算每个字节的值,进行移位操作,更新位起始位置bitstartpos,并基于字节掩码数组依次进行移位操作,更新所有字本文档来自技高网...

【技术保护点】

1.一种二进制序列化方法,其特征在于,包括:

2.根据权利要求1所述的二进制序列化方法,其特征在于,所述定义XML格式接口,具体如下:

3.根据权利要求2所述的二进制序列化方法,其特征在于,所述二进制序列化算法和反序列化算法,基于位掩码和移位操作采用跨字节位序处理进行构建。

4.根据权利要求3所述的二进制序列化方法,其特征在于,所述二进制序列化算法和反序列化算法,包括小端二进制序列化算法和小端二进制反序列化算法,以及大端二进制序列化算法和大端二进制反序列化算法。

5.根据权利要求4所述的二进制序列化方法,其特征在于,所述小端二进制序列化算法,具体执行逻辑如下:

6.根据权利要求4所述的二进制序列化方法,其特征在于,所述小端二进制反序列化算法,具体执行逻辑如下:

7.根据权利要求6所述的二进制序列化方法,其特征在于,所述小端序列计算,具体过程如下:

8.根据权利要求4所述的二进制序列化方法,其特征在于,所述大端二进制序列化算法,具体执行逻辑如下:

9.根据权利要求4所述的二进制序列化方法,其特征在于,所述大端二进制反序列化算法,具体执行逻辑如下:

10.根据权利要求9所述的二进制序列化方法,其特征在于,所述大端序列计算,具体过程如下:

...

【技术特征摘要】

1.一种二进制序列化方法,其特征在于,包括:

2.根据权利要求1所述的二进制序列化方法,其特征在于,所述定义xml格式接口,具体如下:

3.根据权利要求2所述的二进制序列化方法,其特征在于,所述二进制序列化算法和反序列化算法,基于位掩码和移位操作采用跨字节位序处理进行构建。

4.根据权利要求3所述的二进制序列化方法,其特征在于,所述二进制序列化算法和反序列化算法,包括小端二进制序列化算法和小端二进制反序列化算法,以及大端二进制序列化算法和大端二进制反序列化算法。

5.根据权利要求4所述的二进制序列化方法,其特征在于,所述小端...

【专利技术属性】
技术研发人员:邓佳棋林家杰顾菀玉
申请(专利权)人:中国电子科技集团公司第十研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1