掌桥专利:专业的专利平台
掌桥专利
首页

指令解析方法、装置、电子设备及存储介质

文献发布时间:2024-04-18 20:02:40


指令解析方法、装置、电子设备及存储介质

技术领域

本发明涉及计算机技术领域,尤其涉及一种指令解析方法、装置、电子设备及存储介质。

背景技术

随着物联网技术的发展,跨设备通讯的场景愈加广泛,在不同的使用场景下,都绕不开各种独立设备间的数据通讯。其中,不同设备可能使用的数据协议不同。并由于设备通讯的不稳定性,在指令传输的过程中可能会出现粘包(多个指令帧被合并为同个字节流的问题)或者分包(单个数据帧被拆分为多个字节流的问题)问题,从而导致通信设备对接收到的指令进行解析时存在一定困难,设备对指令解析的准确度降低。因此,通信设备如何对接收到的指令进行解析,以解决常见的粘包或者分包问题,是亟待解决的重点问题。

发明内容

本发明提供一种指令解析方法、装置、电子设备及存储介质,能够改善现有对指令进行解析的方案。

第一方面,本发明提供一种指令解析方法,包括:

根据已接收字节流和当前输入字节流确定待解析字节流;

从所述待解析字节流中确定字节包头,根据所述字节包头确定目标字节流;

基于所述字节包头确定目标指令转化器,根据所述目标指令转化器对所述目标字节流进行处理获得解析结果。

可选地,所述根据已接收字节流和当前输入字节流确定待解析字节流,包括:

获取已接收字节流,所述已接收字节流为对上一目标字节流解析完成之后的剩余字节流;

将所述已接收字节流和所述当前输入字节流进行顺序拼接,获得所述待解析字节流。

可选地,所述从所述待解析字节流中确定字节包头,包括:

判断所述待解析字节流中第一字节是否存在对应的目标键值;

若所述第一字节不存在对应的目标键值,则舍弃当前第一字节,将下一字节更新为第一字节,重复执行所述判断所述待解析字节流中第一字节是否存在对应的目标键值的操作;

若所述第一字节存在对应的目标键值,则判断下一字节是否存在对应的目标键值,若所述下一字节存在对应的目标键值,则再次重复执行所述判断下一字节是否存在对应的目标键值的操作,直至当前字节不存在对应的目标键值为止,则将包含有目标键值的所有字节确定为所述字节包头。

可选地,所述从所述待解析字节流中确定字节包头,包括:

将所述待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断所述目标字节是否存在对应的目标键值;

若存在对应的目标键值,则确定所述目标字节为所述字节包头;

若不存在对应的目标键值,则舍弃当前第一字节,并将下一字节更新为第一字节,并重复执行所述将所述待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断所述目标字节是否存在对应的目标键值的操作。

可选地,在舍弃当前所述第一字节之后,还包括:

判断所述待解析字节流中的剩余字节长度是否为0;

若所述剩余字节长度为0,则等待下一输入字节流,根据所述下一输入字节流重新确定所述待解析字节流。

可选地,所述根据所述字节包头确定目标字节流,包括:

在所述待解析字节流中,将所述字节包头以及所述字节包头之后预设长度的字节流作为所述目标字节流;

若所述待解析字节流中的不满足所述预设长度,则等待下一次的字节流输入,以重新确定待解析字节流和目标字节流。

可选地,所述根据所述目标指令转化器对所述目标字节流进行处理获得解析结果,包括:

根据所述目标指令转化器对所述目标字节流进行转化,获得转化结果;

在所述转化结果为转化成功时,将所述目标字节流输入至指令模型,以基于所述指令模型对所述目标字节流进行解析,获得所述解析结果。

第二方面,本发明提供一种指令解析装置,所述装置包括:

第一确定模块,用于根据已接收字节流和当前输入字节流确定待解析字节流;

第二确定模块,用于从所述待解析字节流中确定字节包头,根据所述字节包头确定目标字节流;

字节处理模块,用于基于所述字节包头确定目标指令转化器,根据所述目标指令转化器对所述目标字节流进行处理获得解析结果。

第三方面,本发明还提供了一种电子设备,所述电子设备包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的指令解析方法。

第四方面,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的指令解析方法。

本发明实施例提供的指令解析方案,首先根据已接收字节流和当前输入字节流确定待解析字节流;然后从待解析字节流中确定字节包头,并进一步从字节包头之后接收到的字节流中逐步确定出目标字节流,当前字节包头和目标字节流可组成一个完整字节流;最后基于字节包头确定目标指令转化器,根据目标指令转化器对目标字节流进行处理获得解析结果。本实施例通过路由寻址的方式确定字节包头并逐步确定目标字节流的方式,使得目标指令转化器解析的是一个符合协议规范的完整字节流,即不存在粘包或分包现象。解决了现有方案存在的指令解析准确低的问题,取到了提高指令解析准确度的有益效果。

应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。

附图说明

为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1是本发明提供的指令解析方法的一个流程示意图;

图2是本发明提供的指令解析方法的另一流程示意图;

图3是本发明提供的基于哈希表存储键值的一个结构示意图;

图4是本发明提供的指令解析装置的一个结构示意图;

图5是本发明提供的电子设备的一个结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本实施例中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

图1为本发明提供的指令解析方法的一个流程示意图,本实施例可适用于对接收到的指令进行解析的情况,该方法可以由指令解析装置来执行,该装置可以采用硬件和/或软件的形式实现,该装置可配置于服务器等计算机设备中。参考图1,该方法具体可以包括如下步骤:

S110、根据已接收字节流和当前输入字节流确定待解析字节流。

在介绍本实施例提供的指令解析方案之前,需进行如下情况说明:本方案的应用设备可以是包含有指令解析模块的终端设备,如移动终端设备,打印设备以及其余智能终端设备等。一般地,本实施例应用于两个终端设备间的通信,如在移动终端设备向打印设备发送查询指令时,打印设备根据通信协议向移动终端设备反馈查询指令对应的查询结果;在当前通信的过程中,打印设备需要对移动终端设备发送的查询指令进行指令解析,移动终端设备也需对打印设备回复的查询结果对应的指令进行解析等。在打印设备和移动终端设备进行指令解析的过程中,均可应用本实施例提供的指令解析方案。具体本实施例提供的指令解析方案的应用设备类型以及应用场景在此不做限制。

在终端设备接收字节流时,可以为逐个字节流进行接收,也可以为将预设位数的字节打包成帧,一帧一帧进行接收。在每接收到一个字节流,或一帧字节流之后,终端设备便可执行一次本实施例提供的指令解析方案,但在解析之前,终端设备中可能存在上一次解析完成之后的剩余字节流,则将上一次执行完本实施例提供的指令解析方案,并解析成功之后的剩余字节流称为已接收字节流,当前剩余字节流可能为之前被粘包之后剩余的字节流,也可能为被分包之后长度不够的字节流,具体剩余字节流需结合实际情况进行分析,在此不做限制;在实际应用过程中,可能存在由于已接收字节流较短,并非一个完整字节流进而无法进行解析的情况,此时需继续接收字节流,则将当前终端设备接收到的字节流称为当前输入字节流,当前输入字节流可以为一个字节流,也可以为一帧字节流,具体终端设备对直接传输的方式在此不做限制。

经上述过程,将已接收字节流和当前输入的一个字节流或一帧字节流进行组合,即可获得待解析字节流,其中,待解析字节流会随着对字节分析的过程会进行更新。本实施例提供的指令解析方案,重点在于如何对待解析字节流进行分析,从而达到对待解析字节流进行正确解析的目的。

S120、从待解析字节流中确定字节包头,根据字节包头确定目标字节流。

在终端设备通信的过程中,存在不同通信设备对应的通信协议不同,终端设备之间进行通讯的数据格式规范也有所区别,对应通信协议中的字节包头也有所不同,字节包头一般位于一段完整字节流的首位,用于表示一个指令的开始,如字节包头可以为1a 1a、1b 1b、1c 1c或1d 1d等,具体字节包头的表示形式在此不做限制。

其中,在终端设备A仅与终端设备B固定通信的过程中,其所使用的通信协议是预先设定好的,那么在每次从待解析字节流中确定字节包头时,每次获得的字节包头都是一样的,如1a 1a等。

但是,对于同一个终端设备A而言,可与终端设备B通信,还可与终端设备C通信,如打印设备可与智能手机终端通信,同时也可与PC终端通信。一般地,对于不同类型的终端设备,在进行指令解析时所使用的通信协议不同,进而不同通信协议所包含的字段(包头、数据长度、指令类型以及数据区等)对应的长度均有所不同,从而导致在终端设备A对终端设备B发送的指令进行解析时,从待解析字节流中确定的字节包头可能为1a 1a;进一步在随后解析从待解析字节流中确定的字节包头可能为1b 1b等,具体字节包头的类型在此不做限制。

从待解析字节流中确定字节包头时,可根据当前通信协议方式确定目标字节包头,如目标字节包头为1a 1a,则从待解析字节流中查找目标字节包头,并确定目标字节包头对应的目标键值,若能够查找到,则目标字节包头确定为1a1a;若不能查找到,则继续接收下一字节流;在从待解析字节流中确定字节包头时,本实施例还可根据每次分析字节包头的字节数量是否相同,可分为方式一和方式二。其中,方式一为待解析字节流中字节包头的字节数不固定的情况,则可对字节流进行逐个分析;方式二为待解析字节流中字节包头的字节数固定的情况,则每次对待解析字节流中预设数量的字节进行分析,如每次为2个字节等。

方式一的实现方式如下:判断待解析字节流中第一字节是否存在对应的目标键值;若第一字节不存在对应的目标键值,则舍弃当前的第一字节,将下一字节更新为第一字节,重复执行判断待解析字节流中第一字节是否存在对应的目标键值的操作;若第一字节存在对应的目标键值,则判断下一字节是否存在对应的目标键值,若下一字节存在对应的目标键值,则再次重复执行判断下一字节是否存在对应的目标键值的操作,直至当前字节不存在对应的目标键值为止,则将包含有目标键值的所有字节确定为字节包头。

方式二的实现方式如下:将待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断目标字节是否存在对应的目标键值;若存在对应的目标键值,则确定目标字节为字节包头;若不存在对应的目标键值,则舍弃当前第一字节,并将下一字节更新为第一字节,并重复执行将待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断目标字节是否存在对应的目标键值的操作。

其中,上述方式一和方式二中的目标键值用于确定字节包头的所属类型,进而有助于在步骤S130中确定出对应的指令转化器。

上述目标字节流指示确定出的当前待解析的完整字节流,当前目标字节流不存在分包或粘包情况。进一步地,根据字节包头确定目标字节流的方式可以为:在待解析字节流中,将字节包头以及字节包头之后预设长度的字节流作为目标字节流。其中,当前预设长度与通信协议有关,不同通信协议在进行指令传输时,对应字节流的长度不同。

S130、基于字节包头确定目标指令转化器,根据目标指令转化器对目标字节流进行处理获得解析结果。

指令转化器用于从待解析字节流读取指令帧并对指令帧进行解析的功能模块。根据具体情况有不同的输出结果,具体分为字节流长度不足导致的解析失败和解析成功。其中,在本实施例中,对指令进行解析之前,可预先设置有多个指令转化器,在实际使用时,会根据待解析字节流进行寻址以确定到目标指令转化器。

其中,上述基于字节包头确定目标指令转化器时,即为根据字节包头进行逐字节流寻址或预设字节流寻址,以确定出目标键值,并可根据目标键值确定出目标指令转化器。一个键值对应一种类型的指令转化器。

可选的,在本实施例中根据目标指令转化器对目标字节流进行处理获得解析结果的方式可以为:根据目标指令转化器对目标字节流进行转化,获得转化结果;在转化结果为转化成功时,将目标字节流输入至指令模型,以基于指令模型对目标字节流进行解析,获得解析结果。经过输出的解析结果可以对指令进行完整解析,从而确定传输指令的表示含义,提高了指令解析的准确度。

本实施例提供的指令解析方法,首先根据已接收字节流和当前输入字节流确定待解析字节流;然后从待解析字节流中确定字节包头,并进一步从字节包头之后接收到的字节流中逐步确定出目标字节流,当前字节包头和目标字节流可组成一个完整字节流;最后基于字节包头确定目标指令转化器,根据目标指令转化器对目标字节流进行处理获得解析结果。本实施例通过路由寻址的方式确定字节包头并逐步确定目标字节流的方式,使得目标指令转化器解析的是一个符合协议规范的完整字节流,即不存在粘包或分包现象。解决了现有方案存在的指令解析准确低的问题,取到了提高指令解析准确度的有益效果。

图2是本发明提供的指令解析方法的另一流程示意图,本实施例与上述实施例之间的关系对上述实施例相应特征的进一步细化。如图2所示,该方法可以包括如下步骤:

S210、获取已接收字节流。

上述已接收字节流为对上一目标字节流解析完成之后的剩余字节流。目标字节流指示经本实施例提供的指令解析方案确定出完整字节流;则上一目标字节流指示在本次解析之前,上一次执行完指令解析方案,并解析成功之后的剩余字节流称,也可理解为上次被粘包之后剩余的字节流,也可能为被分包之后长度不够的字节流。

S211、将已接收字节流和当前输入字节流进行顺序拼接,获得待解析字节流。

如,当前目标字节流应为1b 1b 01 00 01 01;已接收字节流为1b 1b 01,已接收字节流为被上一条指令帧粘走之后的剩余字节流,当前输入字节流可以依次为00,那么将已接收字节流和当前输入字节流进行顺序拼接,可获得待解析字节流1b 1b 01 00。

S220、判断待解析字节流中第一字节是否存在对应的目标键值。

在确定字节流对应应键值时,可预先通过哈希表(HashMap)对每个字节对应的键值进行存储,其中,在HashMap中可能存在前几位字节相同的情况,进一步对每个字节进行逐个分析,以基于HashMap逐渐寻址到根节点,即可获得不同字节对应的键值,进而便于后续步骤根据不同键值确定到对应的指令转化器等。

其中,在待解析字节流中字节包头的字节数不固定时,可对待解析字节流中的字节进行逐个分析,若待解析字节流中第一字节不存在对应的目标键值,即否,则执行步骤S221;若待解析字节流中第一字节存在对应的目标键值,即是,则执行步骤S222。

S221、舍弃当前第一字节,将下一字节更新为第一字节。

若第一字节不存在对应的目标键值,表示该第一字节不是指令帧的开头,则舍弃当前第一字节,待解析字节流丢弃首字节,将下一字节更新为第一字节,并重复执行上述步骤S220判断待解析字节流中第一字节是否存在对应的目标键值的操作,直至确定到第一字节存在对应的目标键值为止。进行舍弃的目的在于,可能由于第一字节是被分包或粘包的而来的,且当前字节不属于包头,则可进行舍弃,以便于逐个字节分析确定出字节包头。

请参照图3,图3是本发明提供的基于哈希表存储键值的一个结构示意图;以当前待解析字节流为00 01 0x 1d 0x aa 01 02为例,其中0x为指令帧的开头,当前待解析字节流的第一字节为00,经HashMap寻址发现00不存在对应的目标键值,则舍弃00;将01作为新的第一字节,再次经HashMap寻址发现01也不存在对应的目标键值,则舍弃01;将0x作为新的第一字节,再次经HashMap寻址发现0x存在对应的目标键值(即能够在HashMap中查找到),那么执行步骤S222。需要说明的是,本实施例在基于哈希表存储键值时,不以图示存储的示例为限制,本实施例能够支持各种指令转化器的注册,能支持各种不同的数据协议格式,从而便于通过存储的路由结构,通过路由寻址的方式,能快速确认当前字节流是否符合协议规范;同时在不同的设备,能快速进行各种定制协议对接,因为只需要在根据不同设备所需的协议规范,注册对应的指令转化器即可,后续定制开发不再需要进行针对性处理。

S222、判断下一字节是否存在对应的目标键值。

判断下一字节是否存在对应的目标键值的目的在于,基于HashMap进行逐层寻址,以便于确定出字节包头。

若下一字节存在对应的目标键值,即是,则执行步骤S223。若下一字节不存在对应的目标键值,即否,则执行步骤S224。

S223、将下一字节之后的字节作为更新后的下一字节。

当前步骤用于在下一字节存在对应的目标键值时,继续获取下一字节之后的字节,以作为更新后的下一字节,并继续执行步骤S222判断下一字节是否存在对应的目标键值的操作,直至出现判断的字节不存在对应的目标键值为止。

S224、将包含有目标键值的所有字节确定为字节包头。

以上述步骤S221示例,在0x存在对应的目标键值之后,进一步对1d 0x aa01 02进行分析,判断1d在HashMap是否存在第二个键值,经寻址发现,1d存在对应的目标键值,则继续判断0x 1d之后的0x在HashMap是否存在目标键值,经寻址后发现存在两个对应的目标键值,进一步判断aa在HashMap是否存在目标键值,经寻址后发现存在对应的目标键值;进而判断01在HashMap不存在对应的目标键值,即没有查找到,则将0x1d 0xaa作为字节包头。

一种可选方式,在本实施例中提供的从待解析字节流中确定字节包头的方案,除可基于上述步骤S220~S222实现外,还可通过如下实现,具体方案如下:

a)将待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断目标字节是否存在对应的目标键值;b)若存在对应的目标键值,则确定目标字节为字节包头;c)若不存在对应的目标键值,则舍弃当前第一字节,并将下一字节更新为第一字节,并重复执行将待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断目标字节是否存在对应的目标键值的操作。

请继续参照图3,该种方式用于在待解析字节流中字节包头的字节数固定的情况下,如每次为4个字节,继续以当前待解析字节流为00 01 0x 1d 0x aa 0102进行示例,首先以00 01 0x 1d作为目标字节,并经HashMap寻址发现不存在对应的目标键值,则舍弃第一字节00;并进一步将01 0x 1d 0x作为目标字节,并经HashMap寻址发现不存在对应的目标键值,则舍弃01;再将0x 1d 0x aa作为目标字节,经HashMap寻址发现存在对应的目标键值,则确定0x 1d 0x aa为字节包头。在本实施例中,由于目标字节的数量固定,则每舍弃当前第一字节时,需从待解析字节流中将未被分析的剩余字节流进行顺序补充,以使得在每次对目标直接分析时均满足预设数量。在待解析字节流长度不足时,需等待下一次字节流的输入,从而继续分析。具体本实施例提供的预设数量在此不做限制,以实际需求为准。

再一种实现方式,在上述步骤S220~S222提供的实施例以及上述a)~c)提供的实施例中,在舍弃当前第一字节之后,本实施例提供的指令解析方案还包括:判断待解析字节流中的剩余字节长度是否为0;若剩余字节长度为0,则等待下一输入字节流,根据下一输入字节流重新确定待解析字节流。在逐个舍弃之后,表明待解析字节流中已没有字节,则需等待下一输入字节流,从而重复根据下一输入字节流重新确定待解析字节流,进而从待解析字节流中确定出字节包头。

S230、在待解析字节流中,将字节包头以及字节包头之后预设长度的字节流作为目标字节流。

以0x1d 0xaa为开头的指令帧为例,可确定当前指令类型对应的预设长度为5,则可将连同0x1d 0xaa在内以及0x1d 0xaa之后的5位字节流作为目标字节流。具体预设长度的选取在此不做限制,以每个通信协议对应的规范为准。

本实施例提供的方案还包括:若待解析字节流中的不满足预设长度,则等待下一次的字节流输入,以重新确定待解析字节流和目标字节流。在待解析字节流中的不满足预设长度时,则表明待解析字节流不是本实施例最终所需进行分析的完整字节流,则需等待下一次的字节流输入,以重新确定待解析字节流和目标字节流。

S240、基于字节包头确定目标指令转化器。

请参照图3,在图3中,指令转化器1、指令转化器2和指令转化器3对应不同的存储地址。在基于字节包头确定目标指令转化器时,若字节包头为0x1d0x1d则基于哈希表寻址可确定目标指令转化器为指令转化器1;若字节包头为0x1d 0x1d 0x1c基于哈希表寻址可确定目标指令转化器为指令转化器2;若字节包头为0x1d 0xaa基于哈希表寻址可确定目标指令转化器为指令转化器3,其中,图3中的0xffff表示转换器存储地址。

S250、根据目标指令转化器对目标字节流进行转化,获得转化结果。

转化结果包括转化成功和转化失败,转化失败的原因在于,待解析字节流长度不足,则等待下一次的字节流输入,以重新确定待解析字节流和目标字节流,该种方式可以解决当一个指令帧中包含的多个字节被拆开时(拆包),则可因待解析字节流长度不足,进而无法转化,需等待下一次的字节流输入,直至待解析字节流包含有完整的能够被解析的字节流为止,可解决拆包问题,提升指令解析的准确性。

S251、在转化结果为转化成功时,将目标字节流输入至指令模型,以基于指令模型对目标字节流进行解析,获得解析结果。

指令模型用于执行指令转化器执行成功的输出结果,可根据具体数据协议进行定制。所有指令模型均存在一些共性,比如转化耗费的字节数量和原生的指令帧字节数据等,通过指令模型即可获得目标字节流表示的具体含义。在对目标字节流进行解析完成后,若待解析字节流长度不为0,可能还有粘包的指令帧,此时可重复执行步骤S210~步骤S251,直至待解析字节流的长度为0为止,该种方案可解决解决粘包问题,提升指令解析的准确性。

一种应用场景,在本实施例中,以打印设备版本1.2.10,假设移动设备和打印设备均集成了本实施例提供的指令解析模块。

1.移动设备向打印设备发起查询打印设备固件版本和打印5张自检页请求,根据数据协议,打印设备接收到的指令数据字节流为:1b 1b 00 00 00 1b 1b 01 0001 05;

2.打印设备接收数据,进行操作后进行回复:1b 1b 06 00 00 31 2e 32 2e 31301b 1b 01 00 01 01。

3.移动设备对接收到的指令进行解析,即可输出1b 1b 06 00 00 31 2e 32 2e3130和1b 1b 01 00 01 01两条正确的指令帧,并转化为相应的指令模型,以使得指令模型翻译出上述两条指令帧对应的回复内容分别为:打印设备固件版本1.2.10;打印自检页成功。通过指令模型对正确的指令帧进行翻译,我们即可获得打印设备固件版本信息和打印自检页结果信息。

本实施例提供的指令解析方法,先根据已接收字节流和当前输入字节流确定待解析字节流;然后从待解析字节流中确定字节包头,并进一步从字节包头之后接收到的字节流中逐步确定出目标字节流,当前字节包头和目标字节流可组成一个完整字节流;最后基于字节包头确定目标指令转化器,根据目标指令转化器对目标字节流进行处理获得解析结果。本实施例通过路由寻址的方式确定字节包头并逐步确定目标字节流的方式,使得目标指令转化器解析的是一个符合协议规范的完整字节流,即不存在粘包或分包现象。解决了现有方案存在的指令解析准确低的问题,取到了提高指令解析准确度的有益效果。

图4是本发明提供的指令解析装置的一个结构示意图,该装置适用于执行本实施例提供的指令解析方法。如图4所示,该装置具体可以包括:第一确定模块410、第二确定模块420和字节处理模块430,其中:

第一确定模块410,用于根据已接收字节流和当前输入字节流确定待解析字节流;

第二确定模块420,用于从所述待解析字节流中确定字节包头,根据所述字节包头确定目标字节流;

字节处理模块430,用于基于所述字节包头确定目标指令转化器,根据所述目标指令转化器对所述目标字节流进行处理获得解析结果。

本实施例提供的指令解析装置,首先根据已接收字节流和当前输入字节流确定待解析字节流;然后从待解析字节流中确定字节包头,并进一步从字节包头之后接收到的字节流中逐步确定出目标字节流,当前字节包头和目标字节流可组成一个完整字节流;最后基于字节包头确定目标指令转化器,根据目标指令转化器对目标字节流进行处理获得解析结果。本实施例通过路由寻址的方式确定字节包头并逐步确定目标字节流的方式,使得目标指令转化器解析的是一个符合协议规范的完整字节流,即不存在粘包或分包现象。解决了现有方案存在的指令解析准确低的问题,取到了提高指令解析准确度的有益效果。

一实施例中,所述第一确定模块410包括字节流获取单元和字节流拼接单元,其中:

字节流获取单元,用于获取已接收字节流,所述已接收字节流为对上一目标字节流解析完成之后的剩余字节流;

字节流拼接单元,用于将所述已接收字节流和所述当前输入字节流进行顺序拼接,获得所述待解析字节流。

一实施例中,所述第二确定模块420,具体用于判断所述待解析字节流中第一字节是否存在对应的目标键值;若所述第一字节不存在对应的目标键值,则舍弃当前第一字节,将下一字节更新为第一字节,重复执行所述判断所述待解析字节流中第一字节是否存在对应的目标键值的操作;若所述第一字节存在对应的目标键值,则判断下一字节是否存在对应的目标键值,若所述下一字节存在对应的目标键值,则再次重复执行所述判断下一字节是否存在对应的目标键值的操作,直至当前字节不存在对应的目标键值为止,则将包含有目标键值的所有字节确定为所述字节包头。

一实施例中,所述第二确定模块420,具体还用于将所述待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断所述目标字节是否存在对应的目标键值;若存在对应的目标键值,则确定所述目标字节为所述字节包头;若不存在对应的目标键值,则舍弃当前第一字节,并将下一字节更新为第一字节,并重复执行所述将所述待解析字节流中从第一字节起的预设数量的字节作为目标字节,判断所述目标字节是否存在对应的目标键值的操作。

一实施例中,所述第二确定模块420,具体还用于判断所述待解析字节流中的剩余字节长度是否为0;若所述剩余字节长度为0,则等待下一输入字节流,根据所述下一输入字节流重新确定所述待解析字节流。

一实施例中,所述第二确定模块420,具体还用于在所述待解析字节流中,将所述字节包头以及所述字节包头之后预设长度的字节流作为所述目标字节流;若所述待解析字节流中的不满足所述预设长度,则等待下一次的字节流输入,以重新确定待解析字节流和目标字节流。

一实施例中,所述字节处理模块430包括字节流转化单元和字节流解析单元,其中:

字节流转化单元,用于根据所述目标指令转化器对所述目标字节流进行转化,获得转化结果;

字节流解析单元,用于在所述转化结果为转化成功时,将所述目标字节流输入至指令模型,以基于所述指令模型对所述目标字节流进行解析,获得所述解析结果。

本领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述功能模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本发明还提供了一种电子设备,所述电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的指令解析方法。

本发明还提供了一种计算机可读介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的指令解析方法。

下面参考图5,其示出了适于用来实现本发明的电子设备的计算机系统500的结构示意图。图5示出的电子设备仅仅是一个示例,不应对本实施例的功能和使用范围带来任何限制。

如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。

以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。

特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本实施例中所涉及到的模块和/或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块和/或单元也可以设置在处理器中,例如,可以描述为:一种处理器包括第一确定模块、第二确定模块和字节处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:根据已接收字节流和当前输入字节流确定待解析字节流;从所述待解析字节流中确定字节包头,根据所述字节包头确定目标字节流;基于所述字节包头确定目标指令转化器,根据所述目标指令转化器对所述目标字节流进行处理获得解析结果。

根据本实施例的技术方案,通过路由寻址的方式确定字节包头并逐步确定目标字节流的方式,使得目标指令转化器解析的是一个符合协议规范的完整字节流,即不存在粘包或分包现象。解决了现有方案存在的指令解析准确低的问题,取到了提高指令解析准确度的有益效果。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

相关技术
  • 动态指令的执行方法、装置、电子设备及存储介质
  • 数据包解析方法、装置、电子设备和存储介质
  • 指令执行方法、指令执行装置及存储介质
  • 电子设备的显示控制方法、装置、电子设备和存储介质
  • 电子设备控制方法及装置、电子设备及存储介质
  • 一种指令集生成、程序解析方法装置、设备以及存储介质
  • 虚拟机指令解析加速方法、装置和计算机存储介质
技术分类

06120116587577