CN109104405A - 二进制协议编码、解码方法和装置 - Google Patents
二进制协议编码、解码方法和装置 Download PDFInfo
- Publication number
- CN109104405A CN109104405A CN201810686262.6A CN201810686262A CN109104405A CN 109104405 A CN109104405 A CN 109104405A CN 201810686262 A CN201810686262 A CN 201810686262A CN 109104405 A CN109104405 A CN 109104405A
- Authority
- CN
- China
- Prior art keywords
- type
- field
- child node
- coding
- node field
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Communication Control (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种二进制协议编码、解码方法和装置,属于通信技术领域。所述方法包括:接收数据分发服务消息;将数据分发服务消息解析为键值对结构,键值对结构的关键字用于指示二进制协议的格式,键值对结构的值为需要采用二进制协议传输的内容;根据关键字确定对应的信息单元标识列表,信息单元标识列表包括至少一个信息单元标识;在数据库中分别查找信息单元标识列表中的各个信息单元标识对应的编码规则;分别采用查找到的各个编码规则对键值对结构的值进行编码,得到采用不同的编码规则编码得到的二进制编码结果;将二进制编码结果通过二进制字节流发送给编码规则对应的地址,或者将二进制编码结果写成二进制文件发送给编码规则对应的地址。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种二进制协议编码、解码方法和装置。
背景技术
二进制协议是一串字节流,通常包括消息头(Header)和消息体(Body)两大部分。其中,消息头的长度固定,并且消息头中携带有消息体的长度,这样就能够从字节流中解析出完整的二进制数据。
二进制协议广泛应用在通信系统内部各个设备的数据交换中,其优点在于没有冗余字段,传输高效。缺点是每个二进制协议的每个字节是固定的定义,这就造成了在传统的二进制协议编解码方法中,对于每个协议都必须写一套代码去编码或者解码二进制字节流中的每一个字节,代码开发量十分巨大,需要的人力成本和时间成本非常高。并且通信系统内部各设备使用二进制协议交互过程中,经常会因为通信系统的维护或者升级等的原因,二进制协议结构会经常扩展或者变动,造成了开发人员必须去维护一个十分巨大的二进制编解码的代码库。
发明内容
本发明实施例提供了一种二进制协议编码、解码方法和装置。所述技术方案如下:
第一方面,本发明实施例提供了一种二进制协议编码方法,所述方法包括:
接收数据分发服务消息;
将所述数据分发服务消息解析为键值对结构,所述键值对结构的关键字用于指示二进制协议的格式,所述键值对结构的值为需要采用二进制协议传输的内容;
根据所述关键字确定对应的信息单元标识列表,所述信息单元标识列表包括至少一个信息单元标识;
在数据库中分别查找所述信息单元标识列表中的各个信息单元标识对应的编码规则;
分别采用查找到的各个编码规则对所述键值对结构的值进行编码,得到采用不同的编码规则编码得到的二进制编码结果;
将所述二进制编码结果通过二进制字节流发送给编码规则对应的地址,或者将所述二进制编码结果写成二进制文件发送给编码规则对应的地址。
在本发明实施例的一种实现方式中,所述编码规则包括多个字段,所述多个字段包括至少一个根节点字段和多个子节点字段,所述根节点字段为一个用于承载编码后的数据的容器,所述多个子节点字段与二进制协议的各个字段对应;
所述多个字段中的每个字段均包括字段名称、字段类型、内部编码类型、外部编码类型、长度、来源类型、数据来源、主题和关键字。
在本发明实施例的另一种实现方式中,所述分别采用查找到的各个编码规则对所述键值对结构的值进行编码,包括:
判断所述根节点字段的来源类型是否为存储过程类型;
如果所述根节点字段的来源类型是存储过程类型,则调用所述根节点字段的数据来源指示的存储过程,并将从所述数据库中读取的数据填入参数键值对中,然后按照如下步骤遍历所述多个子节点字段;如果所述根节点字段的字段类型不是存储过程类型,则按照如下步骤遍历所述多个子节点字段;
判断所述子节点字段的字段类型是否为容器类型;
如果所述子节点字段的字段类型是容器类型,则判断所述子节点字段的来源类型是否为存储过程类型;如果所述子节点字段的来源类型是存储过程类型,则调用所述子节点字段的数据来源指示的存储过程,并将从所述数据库中读取的数据填入容器中;如果所述子节点字段的字段类型不是存储过程类型,则获取所述子节点字段的数据;
如果所述子节点字段的字段类型不是容器类型,则获取所述子节点字段的数据;将所述子节点字段的数据写入二进制流。
在本发明实施例的另一种实现方式中,所述获取所述子节点字段的数据,包括:
判断所述子节点字段的来源类型是否为默认值;
如果所述子节点字段的来源类型是默认值,则根据所述子节点字段的数据来源读取默认值;如果所述子节点字段的来源类型不是默认值,则根据所述参数键值对确定数据索引,根据所述数据索引读取数据。
在本发明实施例的另一种实现方式中,所述将所述子节点字段的数据写入二进制流,包括:
判断所述子节点字段的字段类型;
当所述子节点字段的字段类型为数值型时,判断所述子节点字段的外部编码类型和内部编码类型;
如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十进制,则采用2-16十进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十六进制,则采用2-16十六进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为IP编码类型,则采用2-16IP编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十进制,则采用BCD十进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十六进制,则采用BCD十六进制编码规则将所述子节点字段的数据写二进制流;
当所述子节点字段的字段类型为字符串型时,判断所述子节点字段的外部编码类型和内部编码类型,所述内部编码类型包括:右侧补0x00、右侧补0x30、左侧补0x00及左侧补0x30,所述外部编码类型包括:GB2312和UTF8;
根据所述子节点字段的外部编码类型和内部编码类型,按照字符串编码规则写二进制流。
第二方面,本发明实施例还提供了一种二进制协议解码方法,所述方法包括:
接收二进制协议数据,所述二进制协议数据为二进制字节流或者二进制文件;
根据所述二进制协议数据获取信息单元标识;
在数据库中查找所述信息单元标识对应的解码规则;
采用查找到的解码规则对所述二进制协议数据进行解码,得到原始数据。
在本发明实施例的一种实现方式中,所述解码规则包括多个字段,所述多个字段包括至少一个根节点字段和多个子节点字段,所述根节点字段为一个用于承载解码后的数据的容器,所述多个子节点字段与二进制协议的各个字段对应;
所述多个字段中的每个字段均包括字段名称、字段类型、内部编码类型、外部编码类型、长度、来源类型、数据来源、主题和关键字。
在本发明实施例的另一种实现方式中,所述采用查找到的解码规则对所述二进制协议数据进行解码,包括:
根据所述根节点字段创建容器;
按照如下步骤遍历所述多个子节点字段;
判断所述子节点字段的字段类型是否为容器类型;
如果所述子节点字段的字段类型是容器类型,则遍历所述子节点字段的子容器;
如果所述子节点字段的字段类型不是容器类型,则根据所述子节点字段的字段类型调用不同的解码方法解码所述二进制协议数据;将解码得到的数据放入所述容器中。
第三方面,本发明实施例提供了一种二进制协议编码装置,所述装置用于执行如第一方面任一项所述的二进制协议编码方法。
第四方面,本发明实施例提供了一种二进制协议解码装置,其特征在于,所述装置用于执行如第二方面任一项所述的二进制协议解码方法。
本发明实施例提供的技术方案带来的有益效果是:
通过根据关键字确定对应的信息单元标识列表,然后利用信息单元标识在数据库中查找对应的编码规则进行数据编码,然后将编码得到的二进制编码结果以二进制字节流或二进制字节流的形式进行发送,在该编码过程中,只需要对不同的二进制协议制定相应的编码规则,即可完成对于不同二进制协议的编码,无需单独为每种二进制协议单独开放一整套代码,节省了人力成本和时间成本,且由于在系统升级等过程中,只需要对编码规则进行升级,升级成本小。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种二进制协议编码方法的流程图;
图2是本发明实施例提供的服务器的结构示意图;
图3是本发明实施例提供的编码规则配置页面的示意图;
图4是本发明实施例提供的编码过程示意图;
图5是本发明实施例提供的一种二进制协议解码方法的流程图;
图6是本发明实施例提供的解码过程示意图;
图7是本发明实施例提供的一种二进制协议编码装置的结构示意图;
图8是本发明实施例提供的一种二进制协议解码装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的一种二进制协议编码方法的流程图,参见图1,所述方法包括:
步骤101:接收数据分发服务(DDS)消息。
在本发明实施例中,二进制协议编码方法由服务器执行,服务器接收信息发送方发送的数据分发服务消息,然后对其进行编码。信息发送方可以为终端或者其他设备。
图2是本发明实施例提供的服务器的结构示意图,参见图2,该服务器10上配置有数据库(例如Oracle数据库)11、Web服务器(Tomcat)12和接口处理模块13,其中接口处理模块13用来接收DDS消息,并定时发送编码后的数据。Web服务器12为用户操作入口,供用户制定、修改、删除编码规则、解码规则。
步骤102:将所述数据分发服务消息解析为键值对(MAP)结构,所述键值对结构的关键字用于指示二进制协议的格式,所述键值对结构的值为需要采用二进制协议传输的内容。
其中,键值对结构包括一个关键字(KEY)和对应的值(Value)。
步骤103:根据所述关键字确定对应的信息单元标识列表,所述信息单元标识列表包括至少一个信息单元标识。
在步骤104之前,该方法还可以包括:根据信息单元标识对键值对结构进行预处理,这里具体的预处理方式可以根据需要设计。
步骤104:在数据库中分别查找所述信息单元标识列表中的各个信息单元标识对应的编码规则。
在本发明实施例的一种实现方式中,所述编码规则包括多个字段,所述多个字段包括至少一个根节点字段和多个子节点字段,也即该根节点字段为这些子节点字段的父节点,所述根节点字段为一个用于承载编码后的数据的容器,所述多个子节点字段与二进制协议的各个字段对应。其中,在多个子节点字段中,还可以存在一个或多个子节点字段存在孙节点字段,此时,该子节点字段也即孙节点字段的父节点,孙节点字段也即该子节点字段的子节点。
其中,所述多个字段中的每个字段均包括字段名称、字段类型、内部编码类型、外部编码类型、长度、来源类型、数据来源、主题和关键字。
该编码规则存储在服务器中,用户可以通过Web服务器登录服务器,对编码规则进行配置。
图3是本发明实施例提供的编码规则(也是解码规则)配置页面的示意图,参见图3,编码规则即图中的协议结构,而配置页面的左侧为协议列表,表示数据库中配置的多个协议的编码规则,例如图中的频率_频率预警报告通知报文,图中具有填充的协议表示被选中,如图3中的线路交换设备基础配置报文,用户可以通过下方的新增、删除、复制等按钮进行操作。左侧还示出了被选中的协议的详细信息,如信息单元标识、协议中文名称、协议英文名称、协议类型、协议端口等。协议结构部分示出了被选中的协议的编码规则,包括前文所说的多个字段。
下面对其中各个字段进行简单说明,如图3所示,每个字段有一个ID,也即数据库ID,数据库ID是该字段在数据库中的唯一标识,用于在数据库查找包括该字段的数据,各个字段具有一个字段名称,其中排在第一位的是Root,也即根节点字段,后续字段都是其子节点,当然在后续各个字段也存在父子关系,如图中的第11个字段即第10个字段的子节点,实际配置页面中会在根节点字段及根节点字段前显示文件夹标识,用户通过点击文件夹标识可以显示或隐藏其子节点。除根节点字段外,其余各个字段与协议中的各个字段对应。字段类型包括容器类型、数值类型及字符串类型等,容器类型对应根节点字段和根节点字段。内部类型(也即内部编码类型)包括十进制、十六进制、IP地址等。外部类型(也即外部编码类型)包括2-16(二进码十六进数)编码类型、二进码十进数(Binary-Coded Decimal,BCD)编码类型等。对于数值类型和字符串类型而言,长度表示该字段的字节长度,而对于容器类型而言,长度表示重复次数,例如图3中第10个字段的字段类型为容器,其长度为13,则该字段的子节点的IP地址会重复13次,每个IP地址4个字节,一共是13*4个字节。来源类型(也即数据来源类型)包括默认值和存储过程。数据来源与来源类型对应,为默认值的具体数值,或者存储过程的名称,对于子节点字段而言,如果数据来源为存储过程,数据来源为空,则可以从父节点的容器内获取数据。主题和关键字表示该字段的主题和关键字,通过此主题和关键字,可以查找到对应的信息单元标识。但是在编码时,界面上不会显示,此主题和关键字对应的信息单元标识关系配置在数据库中。
配置页面的右侧为参数编辑,表示可以对当前选中的字段进行编辑,其中包括新增、新增子节点、修改、删除、上移和下移等操作按钮,同时还显示了该字段的信息,例如选中的Root字段的数据库ID为4079。
步骤105:分别采用查找到的各个编码规则对所述键值对结构的值进行编码,得到采用不同的编码规则编码得到的二进制编码结果。
图4是本发明实施例提供的编码过程示意图,参见图4,步骤105包括:
步骤151:判断所述根节点字段的来源类型是否为存储过程类型。如果所述根节点字段的来源类型是存储过程类型,则执行步骤152;如果所述根节点字段的字段类型不是存储过程类型,按照步骤153-遍历所述多个子节点字段。
步骤152:调用所述根节点字段的数据来源指示的存储过程,并将从所述数据库中读取的数据填入参数键值对(PM)中,按照步骤153-155遍历所述多个子节点字段。
参见图4,步骤152包括:
步骤1521、从容器节点数据源获取存储过程中的虚参名称。
其中,容器节点是指字段类型为容器的节点,既可以为根节点,也可以是根节点的子节点。
其中,容器节点数据源就是指此容器对应的数据来源,存储过程是数据来源中对应的存储过程,例如p_lsce_config_ip。虚参名称是存储过程的输入参数,例如p_lsce_config_ip&id中,id为输入参数。
这里,从容器节点数据源获取到的虚参名称可以为一个、两个或多个。
步骤1522、逐个获取存储过程参数值。
该步骤可以包括:S1、判断步骤1521获取到的虚参名称是否打引号;如果虚参名称打引号,则执行S2,如果虚参名称没有打引号,则执行S3;S2、虚参名称就是参数值,输出参数值;S3、获取虚参名称对应的参数值,输出参数值。
步骤1523、根据该参数值执行存储过程。
其中,执行存储过程是指使用java代码,打开一个数据库链接,调用对应的存储过程,数据库执行此存储过程,并返回输出。根据该参数值执行存储过程是指通过执行存储过程输出对应的参数值。
步骤1524、将存储过程输出写入参数键值对中。
步骤153:判断所述子节点字段的字段类型是否为容器类型;如果所述子节点字段的字段类型是容器类型,则按照步骤151-152的方式获取数据,如果所述子节点字段的字段类型不是容器类型,则执行步骤154。
这里,子节点字段的字段类型是容器类型说明,该子节点下还存在孙节点。
其中,按照步骤151-152的方式获取数据包括,判断所述子节点字段的来源类型是否为存储过程类型;如果所述子节点字段的来源类型是存储过程类型,则调用所述子节点字段的数据来源指示的存储过程,并将从所述数据库中读取的数据填入容器中;如果所述子节点字段的字段类型不是存储过程类型,则获取所述子节点字段的数据。
在步骤153之前,该方法还可以包括:计算节点长度。计算节点长度是指,计算每个子节点的长度,因为长度这个字段是支持计算公式的,比如5+3之类,所以会计算一下。如果是填了一个固定值,就会用这个值。通过该步骤确定出节点长度,进而确定容器的重复次数或者数值的长度。
步骤154:获取所述子节点字段的数据。
参见图4,步骤154包括:
步骤1541:判断所述子节点字段的来源类型是否为默认值。如果所述子节点字段的来源类型是默认值,则执行步骤1542,如果所述子节点字段的来源类型不是默认值,则执行步骤1543。
步骤1542:根据所述子节点字段的数据来源读取默认值。
步骤1543:根据所述参数键值对确定数据索引,根据所述数据索引读取数据。
其中,步骤1543包括:
S1、读取PM中指定索引数据;S2、判断指定索引是否存在取值;如果有则输出该取值作为数据;如果没有则执行步骤S3;S3、判断该指定索引是否为最顶层索引;如果是则执行步骤S4,如果不是则执行步骤S5;S4、将数据设置为null并输出数据;S5、将索引修改为当前索引的上一级,并再次执行步骤S1。
其中,从索引取值是指从该索引对应的容器取值。在该过程中,取值是从下到上一层一层取值的,如S5中的修改索引为当前索引的上一级,就是去上一层容器取对应的值。如果直到最顶层索引,依然没有取到数值,则说明无法通过该数据索引获得取值,此时输出为null。
步骤155:将所述子节点字段的数据写入二进制流。
参见图4,步骤155包括:
步骤1551:判断所述子节点字段的字段类型。
步骤1552:当所述子节点字段的字段类型为数值型时,判断所述子节点字段的外部编码类型和内部编码类型。
步骤1553:如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十进制,则采用2-16十进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十六进制,则采用2-16十六进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为IP编码类型,则采用2-16IP编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十进制,则采用BCD十进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十六进制,则采用BCD十六进制编码规则将所述子节点字段的数据写二进制流。
步骤1554:当所述子节点字段的字段类型为字符串型时,判断所述子节点字段的外部编码类型和内部编码类型(图未详细示出),然后执行步骤1555,所述内部编码类型包括:右侧补0x00、右侧补0x30、左侧补0x00及左侧补0x30,所述外部编码类型包括:GB2312和UTF8。
步骤1555:根据所述子节点字段的外部编码类型和内部编码类型,按照字符串编码规则写二进制流。
在本发明实施例中,根节点容器为一个map,例如map<String,List<map<String,Object>>>。
在该步骤中,每个子节点字段编码后,得到二进制编码结果map,该二进制编码结果map包括各个子节点字段编码后的二进制流。
步骤106:将所述二进制编码结果通过二进制字节流发送给编码规则对应的地址,或者将所述二进制编码结果写成二进制文件发送给编码规则对应的地址。
图5是本发明实施例提供的一种二进制协议解码方法的流程图,参见图5,所述方法包括:
步骤201:接收二进制协议数据,所述二进制协议数据为二进制字节流或者二进制文件。
在本发明实施例中,二进制协议解码方法由服务器执行,服务器接收信息发送方发送的二进制协议数据,然后对其进行解码。信息发送方可以为终端或者其他设备。
步骤202:根据所述二进制协议数据获取信息单元标识。
具体地,根据关键字来确定二进制协议数据对应的信息单元标识。
步骤203:在数据库中查找所述信息单元标识对应的解码规则。
其中,所述解码规则包括多个字段,所述多个字段包括至少一个根节点字段和多个子节点字段,所述根节点字段为一个用于承载解码后的数据的容器,所述多个子节点字段与二进制协议的各个字段对应;
其中,所述多个字段中的每个字段均包括字段名称、字段类型、内部编码类型、外部编码类型、长度、来源类型、数据来源、主题和关键字。
值得说明的是,本发明中的解码规则和编码规则实际是相同的结构,详细参见图3及其说明。
步骤204:采用查找到的解码规则对所述二进制协议数据进行解码,得到原始数据。
图6是本发明实施例提供的解码过程示意图,参见图6,步骤204包括:
步骤241:根据所述根节点字段创建容器;按照步骤242-244遍历所述多个子节点字段。
值得说明的是,在步骤S242之前,该方法还包括:遍历容器子节点字段(也即子节点);计算子节点字段的解码长度。
其中,遍历容器子节点是指遍历此容器下的子节点,每个子节点都按照步骤S242-244的方式执行。计算子节点的解码长度是指确定此子节点的长度,此长度支持计算公式,所以需要计算,如果此长度不是计算公式,则使用此子节点所填的长度即可。
步骤242:判断所述子节点字段的字段类型是否为容器类型;如果所述子节点字段的字段类型是容器类型,则执行步骤243,如果所述子节点字段的字段类型不是容器类型,则执行步骤244。
步骤243:遍历所述子节点字段的子容器。
参见图6,该方法还包括:子容器解码;判断返回结果Map中是否有此节点结果;如果有,则取出结果Map中此节点结果列表;如果没有,则新建列表存此节点结果;将子容器结果放入该结果列表中;结束遍历容器子节点。
其中,子容器解码即重复步骤241-243,返回结果map<String,List<map<String,Object>>>。判断返回结果map中是否有此节点结果包括:判断返回结果map<String,List<map<String,Object>>>中有没有此节点的List<map<String,Object>>,如果有,则取出;如果没有,创建一个List<map<String,Object>>放到返回结果map中。
步骤244:根据所述子节点字段的字段类型调用不同的解码方法解码所述二进制协议数据;将解码得到的数据放入所述容器中。
参见图6,步骤244可以包括:
步骤2441:判断所述子节点字段的字段类型,如果所述子节点字段的字段类型为数值型,则执行步骤2442-2443;如果所述子节点字段的字段类型为字符串型,则执行步骤2444;如果所述子节点字段的字段类型为字节流型,则执行步骤2445。
步骤2442:判断所述子节点字段的外部编码类型和内部编码类型。
步骤2443:如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十进制,则采用2-16十进制解码规则完成所述子节点字段的二进制解码;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十六进制,则采用2-16十六进制解码规则完成所述子节点字段的二进制解码;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为IP编码类型,则采用2-16IP解码规则完成所述子节点字段的二进制解码;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十进制,则采用BCD十进制解码规则完成所述子节点字段的二进制解码;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十六进制,则采用BCD十六进制解码规则完成所述子节点字段的二进制解码。
步骤2444:当所述子节点字段的字段类型为字符串型时,判断所述子节点字段的外部编码类型和内部编码类型(图未详细示出),然后根据外部编码类型、内部编码类型以及字符串解码规则完成所述子节点字段的二进制解码,所述内部编码类型包括:右侧补0x00、右侧补0x30、左侧补0x00及左侧补0x30,所述外部编码类型包括:GB2312和UTF8。
步骤2445:当所述子节点字段的字段类型为字节流型时,根据字节流解码规则完成所述子节点字段的二进制解码。
步骤204完成后,将解码内容加入返回结果Map;结束遍历容器子节点;输出返回结果Map,也即输出解码结果。
图7是本发明实施例提供的一种二进制协议编码装置的结构示意图,该装置用于执行如图1所示的二进制协议编码方法,参见图7,该装置包括:接收单元301、解析单元302、确定单元303、查找单元304、编码单元305和发送单元306。
其中,接收单元301用于接收数据分发服务消息;解析单元302用于将所述数据分发服务消息解析为键值对结构,所述键值对结构的关键字用于指示二进制协议的格式,所述键值对结构的值为需要采用二进制协议传输的内容;确定单元303用于根据所述关键字确定对应的信息单元标识列表,所述信息单元标识列表包括至少一个信息单元标识;查找单元304用于在数据库中分别查找所述信息单元标识列表中的各个信息单元标识对应的编码规则;编码单元305用于分别采用查找到的各个编码规则对所述键值对结构的值进行编码,得到采用不同的编码规则编码得到的二进制编码结果;发送单元306用于将所述二进制编码结果通过二进制字节流发送给编码规则对应的地址,或者将所述二进制编码结果写成二进制文件发送给编码规则对应的地址。
接收单元301接收数据分发服务消息的方式可以参见步骤101;解析单元302解析数据分发服务消息的方式可以参见步骤102;确定单元303确定信息单元标识列表的方式可以参见步骤103;查找单元304查找编码规则的方式可以参见步骤104;编码单元305编码的方式可以参见步骤105;发送单元306发送二进制字节流或二进制文件的方式可以参见步骤106,在此省略详细描述。
图8是本发明实施例提供的一种二进制协议解码装置的结构示意图,该装置用于执行如图5所示的二进制协议解码方法,参见图8,该装置包括:接收单元401、获取单元402、查找单元403和解码单元404。
其中,接收单元401用于接收二进制协议数据,所述二进制协议数据为二进制字节流或者二进制文件;获取单元402用于根据所述二进制协议数据获取信息单元标识;查找单元403用于在数据库中查找所述信息单元标识对应的解码规则;解码单元404用于采用查找到的解码规则对所述二进制协议数据进行解码,得到原始数据。
接收单元301接收数据二进制协议数据的方式可以参见步骤201;获取单元402获取信息单元标识的方式可以参见步骤202;查找单元403查找解码规则的方式可以参见步骤203;解码单元404解码的方式可以参见步骤204,在此省略详细描述。
需要说明的是:上述实施例提供的二进制协议编码、解码装置在进行二进制协议编码、解码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的二进制协议编码、解码装置与二进制协议编码、解码方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种二进制协议编码方法,其特征在于,所述方法包括:
接收数据分发服务消息;
将所述数据分发服务消息解析为键值对结构,所述键值对结构的关键字用于指示二进制协议的格式,所述键值对结构的值为需要采用二进制协议传输的内容;
根据所述关键字确定对应的信息单元标识列表,所述信息单元标识列表包括至少一个信息单元标识;
在数据库中分别查找所述信息单元标识列表中的各个信息单元标识对应的编码规则;
分别采用查找到的各个编码规则对所述键值对结构的值进行编码,得到采用不同的编码规则编码得到的二进制编码结果;
将所述二进制编码结果通过二进制字节流发送给编码规则对应的地址,或者将所述二进制编码结果写成二进制文件发送给编码规则对应的地址。
2.根据权利要求1所述的方法,其特征在于,所述编码规则包括多个字段,所述多个字段包括一个根节点字段和多个子节点字段,所述根节点字段为一个用于承载编码后的数据的容器,所述多个子节点字段与二进制协议的各个字段对应;
所述多个字段中的每个字段均包括字段名称、字段类型、内部编码类型、外部编码类型、长度、来源类型、数据来源、主题和关键字。
3.根据权利要求2所述的方法,其特征在于,所述分别采用查找到的各个编码规则对所述键值对结构的值进行编码,包括:
判断所述根节点字段的来源类型是否为存储过程类型;
如果所述根节点字段的来源类型是存储过程类型,则调用所述根节点字段的数据来源指示的存储过程,并将从所述数据库中读取的数据填入参数键值对中,然后按照如下步骤遍历所述多个子节点字段;如果所述根节点字段的字段类型不是存储过程类型,则按照如下步骤遍历所述多个子节点字段;
判断所述子节点字段的字段类型是否为容器类型;
如果所述子节点字段的字段类型是容器类型,则判断所述子节点字段的来源类型是否为存储过程类型;如果所述子节点字段的来源类型是存储过程类型,则调用所述子节点字段的数据来源指示的存储过程,并将从所述数据库中读取的数据填入容器中;如果所述子节点字段的字段类型不是存储过程类型,则获取所述子节点字段的数据;
如果所述子节点字段的字段类型不是容器类型,则获取所述子节点字段的数据;将所述子节点字段的数据写入二进制流。
4.根据权利要求3所述的方法,其特征在于,所述获取所述子节点字段的数据,包括:
判断所述子节点字段的来源类型是否为默认值;
如果所述子节点字段的来源类型是默认值,则根据所述子节点字段的数据来源读取默认值;如果所述子节点字段的来源类型不是默认值,则根据所述参数键值对确定数据索引,根据所述数据索引读取数据。
5.根据权利要求3所述的方法,其特征在于,所述将所述子节点字段的数据写入二进制流,包括:
判断所述子节点字段的字段类型;
当所述子节点字段的字段类型为数值型时,判断所述子节点字段的外部编码类型和内部编码类型;
如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十进制,则采用2-16十进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为十六进制,则采用2-16十六进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为2-16编码类型且内部编码类型为IP编码类型,则采用2-16IP编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十进制,则采用BCD十进制编码规则将所述子节点字段的数据写二进制流;如果所述子节点字段的外部编码类型为BCD编码类型且内部编码类型为十六进制,则采用BCD十六进制编码规则将所述子节点字段的数据写二进制流;
当所述子节点字段的字段类型为字符串型时,判断所述子节点字段的外部编码类型和内部编码类型,所述内部编码类型包括:右侧补0x00、右侧补0x30、左侧补0x00及左侧补0x30,所述外部编码类型包括:GB2312和UTF8;
根据所述子节点字段的外部编码类型和内部编码类型,按照字符串编码规则写二进制流。
6.一种二进制协议解码方法,其特征在于,所述方法包括:
接收二进制协议数据,所述二进制协议数据为二进制字节流或者二进制文件;
根据所述二进制协议数据获取信息单元标识;
在数据库中查找所述信息单元标识对应的解码规则;
采用查找到的解码规则对所述二进制协议数据进行解码,得到原始数据。
7.根据权利要求6所述的方法,其特征在于,所述解码规则包括多个字段,所述多个字段包括至少一个根节点字段和多个子节点字段,所述根节点字段为一个用于承载解码后的数据的容器,所述多个子节点字段与二进制协议的各个字段对应;
所述多个字段中的每个字段均包括字段名称、字段类型、内部编码类型、外部编码类型、长度、来源类型、数据来源、主题和关键字。
8.根据权利要求7所述的方法,其特征在于,所述采用查找到的解码规则对所述二进制协议数据进行解码,包括:
根据所述根节点字段创建容器;
按照如下步骤遍历所述多个子节点字段;
判断所述子节点字段的字段类型是否为容器类型;
如果所述子节点字段的字段类型是容器类型,则遍历所述子节点字段的子容器;
如果所述子节点字段的字段类型不是容器类型,则根据所述子节点字段的字段类型调用不同的解码方法解码所述二进制协议数据;将解码得到的数据放入所述容器中。
9.一种二进制协议编码装置,其特征在于,所述装置用于执行如权利要求1-5任一项所述的二进制协议编码方法。
10.一种二进制协议解码装置,其特征在于,所述装置用于执行如权利要求6-8任一项所述的二进制协议解码方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810686262.6A CN109104405B (zh) | 2018-06-28 | 2018-06-28 | 二进制协议编码、解码方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810686262.6A CN109104405B (zh) | 2018-06-28 | 2018-06-28 | 二进制协议编码、解码方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109104405A true CN109104405A (zh) | 2018-12-28 |
CN109104405B CN109104405B (zh) | 2021-05-28 |
Family
ID=64845296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810686262.6A Active CN109104405B (zh) | 2018-06-28 | 2018-06-28 | 二进制协议编码、解码方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109104405B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111355558A (zh) * | 2019-06-27 | 2020-06-30 | 鸿合科技股份有限公司 | 一种提高连接码连接准确率的方法及相关设备 |
CN111865329A (zh) * | 2020-07-24 | 2020-10-30 | 刘彦君 | 电气二次解码二进制数字信号的方法 |
CN112003876A (zh) * | 2020-09-03 | 2020-11-27 | 苏州盛科科技有限公司 | 一种实现堆叠芯片间传输信息可编程的方法及装置 |
CN112307012A (zh) * | 2019-07-30 | 2021-02-02 | 中科云谷科技有限公司 | 海量工业数据存储和读取方法 |
CN113923274A (zh) * | 2021-09-29 | 2022-01-11 | 航天新气象科技有限公司 | 一种判断传输数据是否被干扰的方法、装置及存储介质 |
CN113949438A (zh) * | 2021-09-24 | 2022-01-18 | 成都飞机工业(集团)有限责任公司 | 一种无人机通讯方法、装置、设备及存储介质 |
CN114327237A (zh) * | 2021-12-15 | 2022-04-12 | 中国地质大学(武汉) | 利用上位机进行实时数据解码的方法、装置及设备 |
CN115834736A (zh) * | 2022-11-14 | 2023-03-21 | 四川启睿克科技有限公司 | 一种二进制报文的声明式报文解码方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559027A (zh) * | 2013-10-22 | 2014-02-05 | 北京航空航天大学 | 一种key与value分开存储的key-value存储系统设计方法 |
US20150032804A1 (en) * | 2013-07-26 | 2015-01-29 | Canon Kabushiki Kaisha | Method and server device for exchanging information items with a plurality of client entities |
CN106066848A (zh) * | 2016-05-24 | 2016-11-02 | 辽宁蓝卡医疗投资管理有限公司 | 数据处理方法、装置及系统 |
CN106407475A (zh) * | 2016-11-18 | 2017-02-15 | 广州爱九游信息技术有限公司 | 内容筛选方法、装置及服务器 |
-
2018
- 2018-06-28 CN CN201810686262.6A patent/CN109104405B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150032804A1 (en) * | 2013-07-26 | 2015-01-29 | Canon Kabushiki Kaisha | Method and server device for exchanging information items with a plurality of client entities |
CN103559027A (zh) * | 2013-10-22 | 2014-02-05 | 北京航空航天大学 | 一种key与value分开存储的key-value存储系统设计方法 |
CN106066848A (zh) * | 2016-05-24 | 2016-11-02 | 辽宁蓝卡医疗投资管理有限公司 | 数据处理方法、装置及系统 |
CN106407475A (zh) * | 2016-11-18 | 2017-02-15 | 广州爱九游信息技术有限公司 | 内容筛选方法、装置及服务器 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111355558A (zh) * | 2019-06-27 | 2020-06-30 | 鸿合科技股份有限公司 | 一种提高连接码连接准确率的方法及相关设备 |
CN112307012A (zh) * | 2019-07-30 | 2021-02-02 | 中科云谷科技有限公司 | 海量工业数据存储和读取方法 |
CN111865329A (zh) * | 2020-07-24 | 2020-10-30 | 刘彦君 | 电气二次解码二进制数字信号的方法 |
CN112003876A (zh) * | 2020-09-03 | 2020-11-27 | 苏州盛科科技有限公司 | 一种实现堆叠芯片间传输信息可编程的方法及装置 |
CN112003876B (zh) * | 2020-09-03 | 2023-04-18 | 苏州盛科科技有限公司 | 一种实现堆叠芯片间传输信息可编程的方法及装置 |
CN113949438A (zh) * | 2021-09-24 | 2022-01-18 | 成都飞机工业(集团)有限责任公司 | 一种无人机通讯方法、装置、设备及存储介质 |
CN113923274A (zh) * | 2021-09-29 | 2022-01-11 | 航天新气象科技有限公司 | 一种判断传输数据是否被干扰的方法、装置及存储介质 |
CN114327237A (zh) * | 2021-12-15 | 2022-04-12 | 中国地质大学(武汉) | 利用上位机进行实时数据解码的方法、装置及设备 |
CN115834736A (zh) * | 2022-11-14 | 2023-03-21 | 四川启睿克科技有限公司 | 一种二进制报文的声明式报文解码方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109104405B (zh) | 2021-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109104405A (zh) | 二进制协议编码、解码方法和装置 | |
EP2609720B1 (en) | Method and apparatus for filtering streaming data | |
CN111339382B (zh) | 字符串数据检索方法、装置、计算机设备及存储介质 | |
CA2936218C (en) | Method and apparatus for concurrent filtering of multiple components of streaming data | |
CN109981599B (zh) | 一种通讯数据流的通用数据解析平台及方法 | |
CN101127044A (zh) | 动态网页的分块方法 | |
CN107193917A (zh) | 基于iid的全站系统配置文件无损数据更新方法 | |
CN113794778B (zh) | 一种基于功能属性的物联网设备描述方法 | |
CN111249736A (zh) | 代码处理方法及装置 | |
CA2809172C (en) | Method and apparatus for employing rules to filter streaming data | |
CN101794318A (zh) | Url解析方法及设备 | |
CN110147431A (zh) | 关键词匹配方法、装置、计算机设备和存储介质 | |
CN110413711A (zh) | 一种差异数据获取方法及其存储介质 | |
CN109144633A (zh) | 活动窗口的数据共享方法、装置、设备及存储介质 | |
CN115712563A (zh) | 一种基于文法变异的模糊测试方法 | |
CN112069305B (zh) | 数据筛选方法、装置及电子设备 | |
CN108429764A (zh) | 一种基于私有协议的数据传输和解析的方法 | |
CN104077414B (zh) | 一种应用于lte网络信号的解码装置及其解码方法 | |
CN110806973A (zh) | 一种接口报文的自动生成方法及装置 | |
CN113949749B (zh) | Xml报文处理方法及装置 | |
CN115168755A (zh) | 基于url特征的异常数据处理方法及系统 | |
FI115350B (fi) | Menetelmä ja laite datarakenteen käyttämiseksi datanpakkauksessa | |
CN115017161A (zh) | 一种结合虚拟dom更新树形数据结构方法、装置及应用 | |
CN108959584A (zh) | 一种基于社区结构的处理图数据的方法及装置 | |
CN110004642A (zh) | 一种衣物处理系统的控制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |