System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及通信,特别涉及一种二进制序列化方法。
技术介绍
1、序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区,之后可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。在军工领域中,各软硬件之间的通信机制不同于当下的互联网应用,为保证存储空间的高利用率和数据传输的高效率,军工软硬件的通信方式采用二进制比特流,通过二进制序列化将对象转换为比特流。
2、在计算机发展历史上,因不同处理器的硬件架构不同,在数据存储格式上有大端序和小端序两种存储模式,两种存储模式对应的比特流结构存在差异。编码人员在定义结构体时,会根据大小端序定义不同结构体,其结构体内部字段顺序不同,尤其是在位域跨越多字节的情况下,结构体内部字段顺序会有很大差异,因此需要编码人员深刻理解在大小端模式下,字节和位域的定义顺序及其存储顺序,才能正确定义结构体。
3、现有的二进制序列化方式包括三种,一种是由编码人员根据接口文件和实际端序定义结构体,工作流程如图5所示。对于定长数据来说可以套用对应端序的结构体,直接取址,无需编码人员编写端序转换过程和序列化过程,处理速度很快。但接口逻辑和业务逻辑耦合程度高,并且对编码人员技术要求较高,需要编码人员深刻理解计算机大小端的存储方式,否则容易出错;特别是在位域跨越多个字节的情况下,结构体字段顺序难以明确,正确定义结构体的过程将变得十分艰难。而对于变长数据来说,无法直接取址,仍需要编码人员编写大小端序转换过程和序列化过程。如图6所示,另一种
技术实现思路
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所述的二进制序列化方法,其特征在于,所述小端...
【专利技术属性】
技术研发人员:邓佳棋,林家杰,顾菀玉,
申请(专利权)人:中国电子科技集团公司第十研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。