公开/公告号CN101321177A
专利类型发明专利
公开/公告日2008-12-10
原文格式PDF
申请/专利权人 中兴通讯股份有限公司;
申请/专利号CN200810141640.9
发明设计人 马征;
申请日2008-07-18
分类号
代理机构深圳市永杰专利商标事务所;
代理人曹建军
地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部
入库时间 2023-12-17 21:06:40
法律状态公告日
法律状态信息
法律状态
2011-06-22
授权
授权
2009-02-18
实质审查的生效
实质审查的生效
2008-12-10
公开
公开
技术领域
本发明涉及一种码流节点及报文的编解码方法,尤其是一种扁平化码流节点及报文的扁平化码流编解码方法。
背景技术
网管系统中,ASN.1(Abstract Syntax Notation One,抽象语法标识)报文的传递有一个编码及解码的过程。编码时,将不同的ASN.1数据类型或结构编制成二进制码流;解码时,将二进制码流还原成具体的ASN.1数据类型或结构。
对ASN.1报文的编解码,目前业界普遍采用标准的BER(BasicEncoding Rules,基本编码规则)方式。BER方式的一个显著缺陷就是不能兼容不同版本的报文,同时,可扩展性也较差。实际应用中,ASN.1报文版本随着用户需求的不断变化而变化,这就需要网管系统能够兼容报文的不同版本,但标准的BER方式无法实现。
发明内容
本发明要解决的技术问题是提供一种扁平化码流节点及报文的扁平化码流编解码方法,实现了网管系统对不同版本报文的兼容。
本发明解决其技术问题所采用的技术方案是:
一种扁平化码流节点,包括名称、类型、索引、成员数及数据字段,各个字段间通过预设的第一标志符分隔,并且,所述扁平化码流节点的起始与结束通过预设的第二标志符标示。
上述方案中,所述数据字段包括报文长度字段及报文数据字段,所述报文长度字段为4个字节;所述扁平化码流节点的类型为BitString时,所述报文数据字段还包括4个字节的有效位字段。
一种报文的扁平化码流编码方法,包括以下步骤:
a、将报文编译成扁平化码流编码源数据;
b、采用结构体编码方法构造所述源数据中的结构体对应的扁平化码流节点;
c、依次构造所述结构体各个数据成员对应的扁平化码流节点,所述数据成员为结构体时,采用所述结构体编码方法构造其对应的扁平化码流节点,并将其所属的各个结构体对应的扁平化码流节点的成员数递增1;所述数据成员为基本数据类型数据时,采用基本数据类型数据编码方法构造其对应的扁平化码流节点,并将其所属的各个结构体对应的扁平化码流节点的成员数递增1。
上述方案中,所述结构体编码方法如下:构造一扁平化码流节点,所述扁平化码流节点的名称为所述结构体的名称;类型为空;所述结构体为其它结构体的数据成员时,索引为其在所述其它结构体数据成员中的位置值,否则,索引为负整数;成员数为0;数据字段中的报文数据为空,报文长度为0;所述名称、类型、索引、成员数及数据字段之间通过预设的第一标志符分隔,所述扁平化码流节点的起始与结束通过预设的第二标志符标示。
上述方案中,所述基本数据类型数据编码方法如下:构造一扁平化码流节点,所述扁平化码流节点的名称为所述基本数据类型数据的变量名称;类型为空或者所述基本数据类型;所述基本数据类型数据为结构体的数据成员时,索引为其在所述结构体数据成员中的位置值,否则,索引为负整数;成员数为0;数据字段中的报文数据为所述基本数据类型数据的业务数据,报文长度为所述报文数据所占的字节数;所述名称、类型、索引、成员数及数据字段之间通过预设的第一标志符分隔,所述扁平化码流节点的起始与结束通过预设的第二标志符标示。
上述方案中,所述基本数据类型为Bit String时,所述扁平化码流节点的类型为Bit String,并且,所述数据字段存在有效位字段,其值为所述报文数据所占的比特位数。
一种报文的扁平化码流解码方法,包括以下步骤:
A、确定扁平化码流对应的结构体及基本数据类型数据之间的关系;
B、将所述扁平化码流节点还原成对应的结构体或基本数据类型数据,并根据所述关系组织所述结构体及基本数据类型数据。
上述方案中,所述步骤B中,还原所述扁平化码流节点时,若所述扁平化码流节点的成员数不为0,直接将其还原成同一名称的结构体;若所述扁平化码流节点的成员数为0,根据其数据字段中的报文数据获取业务数据,并将其还原成同一名称的基本数据类型数据。
上述方案中,所述步骤A具体包括以下步骤:
A1、确定所述扁平化码流包含的扁平化码流节点;
A2、根据所述扁平化码流节点的索引及成员数确定所述扁平化码流对应的结构体数据及基本数据类型数据之间的关系。
上述方案中,所述步骤A1中,根据预设的第一标志符及第二标志符确定所述扁平化码流节点。
本发明的有益效果主要表现在:本发明提供的报文的扁平化码流编码方法将树状码流结构压缩成包含本发明所述的扁平化码流节点的扁平化码流,本发明提供的报文的扁平化码流解码方法通过码流节点名称的严格匹配,将上述扁平化码流恢复成树状码流结构,从而实现了网管系统对不同版本报文的兼容,并且增强了编解码时码流节点的可扩展性。
附图说明
图1为本发明扁平化码流节点的结构示意图;
图2为本发明报文的扁平化码流编码流程图;
图3为本发明报文的扁平化码流解码流程图。
具体实施方式
下面结合附图对本发明作进一步的描述。
参照图1,一种扁平化码流节点,包括名称、类型、索引、成员数及数据字段,各个字段间通过预设的第一标志符,如“\0”分隔,并且,该扁平化码流节点的起始与结束通过预设的第二标志符标示,如采用对应的“{”及“}”分别标示该扁平化码流节点的起始与结束;扁平化码流节点的数据字段进一步包括报文长度字段及报文数据字段,报文长度字段为4个字节,并且,扁平化码流节点的类型为BitString时,报文数据字段还包括4个字节的有效位字段。
扁平化码流节点为报文扁平化码流的基本元素,作为第一标志符及第二标志符的符号不能在数据字段以外的其它字段出现。下面描述的报文的扁平化码流编码方法及报文的扁平化码流解码方法均是基于上述结构的扁平化码流节点。
参照图2,一种报文的扁平化码流编码方法,包括以下步骤:
S201:将报文编译成扁平化码流编码源数据;为了便于跟踪调试,可以同时将编译结果打印出来;
S202:采用结构体编码方法构造源数据根结构体对应的扁平化码流节点;根结构体即源数据树状码流结构的根节点;
S203:依次构造该结构体各个数据成员对应的扁平化码流节点,数据成员为结构体时,采用结构体编码方法构造其对应的扁平化码流节点,并将其所属的各个结构体对应的扁平化码流节点的成员数递增1;数据成员为基本数据类型数据时,采用基本数据类型数据编码方法构造其对应的扁平化码流节点,并将其所属的各个结构体对应的扁平化码流节点的成员数递增1。其中,基本数据类型数据包括Interger、Bit String、Boolean、long等数据类型。
上述流程中所述的结构体编码方法如下:
构造一扁平化码流节点,该扁平化码流节点的名称为结构体的名称;类型为空;结构体为其它结构体的数据成员时,索引为其在所述其它结构体数据成员中的位置值,否则,索引为负整数,可以取-1;成员数为0;数据字段中的报文数据为空,报文长度为0;名称、类型、索引、成员数及数据字段之间通过第一标志符分隔,该扁平化码流节点的起始与结束通过第二标志符标示。
上述流程中所述的基本数据类型数据编码方法如下:构造一扁平化码流节点,该扁平化码流节点的名称为该基本数据类型数据的变量名称;类型为空或者该基本数据类型;该基本数据类型数据为结构体数据的数据成员时,索引为其在结构体数据成员中的位置值,否则,索引为负整数,可以取-1;成员数为0;数据字段中的报文数据为所述基本数据类型数据的业务数据,报文长度为所述报文数据所占的字节数;名称、类型、索引、成员数及数据字段之间通过第一标志符分隔,该扁平化码流节点的起始与结束通过第二标志符标示。
进一步地,该基本数据类型为Bit String时,扁平化码流节点的类型字段不能为空,为Bit String,并且,其数据字段存在有效位字段,值为报文数据所占的比特位数。
参照图3,一种报文的扁平化码流解码方法,包括以下步骤:
S301:根据预设的第一标志符及第二标志符确定其包含的扁平化码流节点;
S302:根据扁平化码流节点的索引及成员数确定扁平化码流对应的结构体及基本数据类型数据之间的关系;
S303:将扁平化码流节点还原成对应的结构体或基本数据类型数据,并根据确定的关系组织结构体及基本数据类型数据;其中,还原扁平化码流节点时,若该扁平化码流节点的成员数不为0,即该扁平化码流节点对应结构体,本身的业务数据为空,因此,直接将其还原成同一名称的结构体;若该扁平化码流节点的成员数为0,即该扁平化码流节点对应基本数据类型数据,则根据其数据字段中的报文数据获取业务数据,并将其还原成同一名称的基本数据类型数据。
从上述描述中可以看出,解码过程中扁平化码流节点与其对应的结构体或基本数据类型数据的名称是严格匹配的,故不会出现解码错位的情况,从而实现了网管系统对不同版本ASN.1报文的兼容。
下面以结构体A为源数据,对本发明所述的报文的扁平化码流编解码方法作进一步的描述,其中,结构体A的第一个数据成员为Interger数据i,第二个数据成员为结构体B;结构体B的第一个数据成员为Interger数据m,第二个数据成员为结构体C;结构体C的第一个数据成员为Interger数据n,第二个数据成员为Bit String数据p。
编码时,依次进行以下操作:
1、对结构体A进行编码,其对应的扁平化码流节点的名称为A;类型为空;索引为-1;成员数为0;数据字段的报文数据为空,报文长度为0;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;
2、对结构体A的第一个数据成员——Interger数据i进行编码,其对应的扁平化码流节点的名称为i;类型为Interger;索引为0(表示i为结构体A的第一个数据成员,即从0开始标示结构体A各个数据成员的位置值);成员数为0;数据字段的报文数据为其业务数据的整型编码,报文长度为报文数据所占的字节数;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;构造i对应的扁平化码流节点的同时,将其所属的结构体A对应的扁平化码流节点的成员数递增1;
3、对结构体A的第二个数据成员——结构体B进行编码,其对应的扁平化码流节点的名称为B;类型为空;索引为1(表示结构体B为结构体A的第二个数据成员);成员数为0;数据字段的报文数据为空,报文长度为0;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;构造结构体B对应的扁平化码流节点的同时,将其所属的结构体A对应的扁平化码流节点的成员数递增1;
4、对结构体B的第一个数据成员——Interger数据m进行编码,其对应的扁平化码流节点的名称为m;类型为Interger;索引为0(表示m为结构体B的第一个数据成员,即从0开始标示结构体B各个数据成员的位置值);成员数为0;数据字段的报文数据为其业务数据的整型编码,报文长度为报文数据所占的字节数;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;构造m对应的扁平化码流节点的同时,将其所属的结构体A及结构体B对应的扁平化码流节点的成员数分别递增1;
5、对结构体B的第二个数据成员——结构体C进行编码,其对应的扁平化码流节点的名称为C;类型为空;索引为1(表示结构体C为结构体B的第二个数据成员);成员数为0;数据字段的报文数据为空,报文长度为0;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;构造结构体C对应的扁平化码流节点的同时,将其所属的结构体A及结构体B对应的扁平化码流节点的成员数分别递增1;
6、对结构体C的第一个数据成员——Interger数据n进行编码,其对应的扁平化码流节点的名称为n;类型为Interger;索引为0(表示n为结构体C的第一个数据成员,即从0开始标示结构体C各个数据成员的位置值);成员数为0;数据字段的报文数据为其业务数据的整型编码,报文长度为报文数据所占的字节数;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;构造n对应的扁平化码流节点的同时,将其所属的结构体A、结构体B及结构体C对应的扁平化码流节点的成员数分别递增1;
7、对结构体C的第二个数据成员——Bit String数据p进行编码,其对应的扁平化码流节点的名称为p;类型为Bit String;索引为1(表示p为结构体C的第二个数据成员);成员数为0;数据字段的报文数据为其业务数据的字节编码,报文长度为报文数据所占的字节数,有效位为报文数据所占的比特位数;名称、类型、索引、成员数及数据字段之间通过“\0”分隔,该扁平化码流节点的起始及结束用对应的“{”“}”分别标示;构造p对应的扁平化码流节点的同时,将其所属的结构体A、结构体B及结构体C对应的扁平化码流节点的成员数分别递增1。
至此该源数据的扁平化码流编码结束,此时,结构体A、结构体B及结构体C对应的扁平化码流节点的成员数分别为6、4及2。
在对其进行解码的过程中,根据图3所示的流程进行,通过对扁平化码流节点与其对应的结构体或基本数据类型数据名称的严格匹配,实现了网管系统对不同版本报文的兼容。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
机译: 兼容立体视频编解码流的生成与重建方法及相关装置
机译: 抑制码流中直流分量的编解码方法
机译: 抑制码流中直流分量的编解码方法