基于XML的二进制文件检测方法和装置与流程

专利2022-05-10  3


基于xml的二进制文件检测方法和装置
技术领域
1.本发明涉及轨道交通信号处理技术领域,尤其涉及一种基于xml的二进制文件检测方法和装置。


背景技术:

2.城市轨道交通cbtc信号系统以及高速铁路ctcs信号系统的在线软件对于实时性要求很高,为了减少cbtc、ctcs系统在线软件的计算量,提升在线软件的运行效率,需要将在线软件运行时所需的一些静态数据进行离线计算处理后,生成二进制文件供在线软件使用(参照《互联互通车载控制器离线数据自动生成方法研究》

铁道通信信号第56卷第11期,2020年11月)。信号系统属于高安全苛求系统,因此保证供信号系统在线软件使用的二进制文件内容的正确至关重要。
3.轨道交通信号系统自身的复杂性,导致了生成供信号系统使用的二进制文件逻辑也相对复杂(需要结合铁路线路中信号设备物理信息以及铁路信号逻辑),所以目前需要由专门的离线软件生成供信号系统使用的二进制文件。只有保证离线软件生成的二进制文件中各个字段的值及其占用的字节长度均正确,才能保证整个二进制文件内容的正确性。目前检查离线软件生成的二进制文件内容是否正确,有两种实施方案。
4.方案一是离线软件生成二进制文件的同时还会生成结构与二进制文件相同的文本文件,该文本文件中记录各个字段的输出值用于人工检查生成的数据是否正确,见图1。方案一的测试覆盖是不完整的,即文本文件内容正确无法完全保证生成的二进制文件正确。原因有三:其一是,生成文本文件和二进制文件调用的不是同一个输出接口,并不能保证二进制文件内容与文本文件内容一致;其二是,二进制文件规定了每个字段数据的字节长度,只从文本文件中无法检查各个字段数据是否按照规定字节长度进行输出;其三是,二进制文件中大小端格式无法被检测。
5.方案二是结合输入数据、离线数据的计算逻辑,人工计算离线数据结果并写入文本文件,然后根据二进制文件结构和文本文件格式编写对应的检查软件检查二进制文件中取值是否和文本文件一致,见图2。此方案虽然能保证二进制文件内容符合预期值,但其检查软件针对特定的二进制结构和文本格式所编写,仅对此结构适用,输入数据一旦改变,需要人工重新计算推导预期值,编写出的文本文件复用率低。
6.在现有技术中,如公开号为cn110222318a,公开时间为2019年9月10日,名称为“基于xml的数据生成工具开发方法”的中国发明专利文献,公开了一种基于xml的数据生成工具开发方法,该发明方法包括可编程xml配置脚本录入、数据输入、数据处理和文件输出的过程,构建了基于xml配置的数据配置工具开发框架,通过一个统一的数据配置工具开发平台,平台以xml脚本的形式对外提供编程接口,在xml脚本中,定义了一套可编程脚本语法,帮助开发人员快速精确的开发出安全的数据配置。该发明通过解析xml脚本,生成统一的树形结构中间数据,根据不同的输出适配器将中间数据输出成多种格式的输出文件,包括二进制文件,txt,xml等格式。即该方案可将同一份中间数据通过不同的输出接口,输出成二
进制文件和文本文件,但是依然无法保证二进制文件内容完全正确,此方案属于上述方案一描述的检查方式。


技术实现要素:

7.为了克服上述现有技术中存在的缺陷和不足,本发明提供了一种基于xml的二进制文件检测方法,本发明的发明目的在于解决现有技术中对离线软件生成的二进制文件的正确性的检查,即使查验文本文件内容正确,仍无法完全保证生成的二进制文件正确的问题;及人工编写文本文件检查二进制文件的复用率低的问题。本发明是在人工检查文本文件后初步确认生成的二进制文件正确后,通过一xml配置文件描述离线软件生成的二进制文件结构、内容,然后由检查软件加载该xml配置文件并生成结构与离线软件使用的中间数据ⅰ结构相同的中间数据ⅱ,中间数据ⅱ可与中间数据ⅰ中的值不同;中间数据ⅱ调用离线软件生成二进制文件接口输出二进制文件,然后由通用检查软件加载xml配置文件,依据xml配置文件中的预期值按照指定的大端或者小端格式检查所述中间数据ⅱ调用离线软件生成二进制文件,是否正确。本发明采用xml配置文件定义二进制文件预期结果,并形成了完整的闭环检查链路,本发明是在人工查验文本文件确认二进制文件初步正确后,对二进制文件进行查验,本发明方法中,检查二进制正确性的标准数据均来源于xml配置文件,能够保证离线软件计算结果正确,并且生成二进制文件内容也正确。
8.为了解决上述现有技术中存在的问题,本发明是通过下述技术方案实现的:基于xml的二进制文件检测方法,包括以下步骤:步骤s1、采用三元树形结构完整表达由离线软件生成的二进制文件ⅰ的结构和内容;所述三元指的是此树形结构中包含三种不同类型的结点,分别为数组类型结点、结构体类型结点和简单类型结点;步骤s2、采用xml配置语法,描述步骤s1中三元树形结构与值,编写得到xml配置文件;步骤s3、依据步骤s2中生成的xml配置文件,生成三元树形结构中间数据ⅱ,具体为:利用组合设计模式,设计结构与步骤s1中定义的三元树形结构相同的映射类;根据步骤s2中定义的xml配置语法,逐层解析xml配置文件结构,将xml配置文件中定义的各个字段的预期值填充入三元树形结构映射类中,将xml配置文件中定义的各个字段的类型、占用字节数,录入所述三元树形结构映射类中,从而生成所述三元树形结构中间数据ⅱ;步骤s4、调用离线软件生成二进制文件的接口,利用该接口将步骤s3中生成的三元树形结构中间数据ⅱ输出成二进制文件ⅱ;若无法输出二进制文件ⅱ,则判定为所述离线软件生成的二进制文件ⅰ错误;若输出二进制文件ⅱ,则进入步骤s5;步骤s5、根据xml文件定义内容检查所述二进制文件ⅱ生成是否正确;具体为:在步骤s2中,编写的xml配置文件中定义了二进制文件的结构以及各字段的预期值、占用字节长度和输出类型,依据xml配置文件中定义的内容,检查所述二进制文件ⅱ结构、预期值、占用字节长度和大小端输出格式是否与xml配置文件中定义的内容相匹配,若均匹配则判定为离线软件生成二进制文件ⅰ正确,若任一项不匹配则判定为离线软件生成二进制文件ⅰ错误。
9.步骤s1中,所述三元树形结构是通过数组类型结点、结构体类型结点和简单类型
结点表达二进制文件结构,数组类型结点下的多个孩子结点类型须一致,可以为数组结点、结构体结点、简单结点中的任意一种;结构体类型结点下的多个孩子结点类型为数组结点、结构体结点、简单结点中的一种或多种;简单类型结点即该树形结构中的叶子结点,该结点下不嵌套孩子结点,简单类型结点中设置有属性value,用以存储实际数据。
10.步骤s2中,所述xml配置语法中,利用标签名称定义三元树形结构中对应的结点名称;利用style属性定义三元树形结构中对应结点的类型;利用export属性定义该结点是否需要输出到二进制文件中,对于数组类型和结构体类型结点,若结点export属性为false,则该结点下所有的孩子结点均不输出至二进制文件中;利用length属性定义数组类型结点的度,即该数组类型结点下孩子结点的个数,length属性定义简单类型结点中value属性值的字节长度;利用origin属性定义数组类型结点输出的起始索引下标;利用value属性定义简单类型结点中value属性值,value属性值的类型由该简单结点的style属性定义。
11.更进一步地,属性style的值为array、compound、long和string,array表示该结点在树形结构中为数组类型结点,compound表示该结点在树形结构中为结构体类型结点,long和string表示该结点为简单类型结点,long和string表示该简单类型结点中value属性值的类型。
12.所述步骤s3中,具体为:将xml配置文件描述的三元树形结构转换为以面向对象程序设计语言中类的形式保存,即将xml配置文件中定义的三元树结构映射为内存中的类对象,所述类对象即为三元树结构中间数据ⅱ。
13.步骤s3中所述的组合设计模式是将类通过继承和/或组合的关系构建成一种树形结构。
14.在调用离线软件生成二进制文件的接口时,只给此接口传递了二进制文件结构、每个字段的值,二进制文件中各个字段占用的字节长度和大小端输出格式信息均取自离线软件内部定义的结果,并且离线软件生成二进制文件接口在生成二进制文件时是以离线软件内部自定义的二进制文件结构输出二进制文件。
15.进一步的,在离线软件生成二进制文件的接口的运行过程中,离线软件生成二进制文件的接口会检查xml配置文件定义的三元树形结构中间数据ⅱ与离线软件定义的二进制文件结构是否一致,不一致则不会生成二进制文件。
16.本发明还提供了一种基于xml的二进制文件检测装置,包括三元树形结构描述模块、xml语法配置模块和检查模块;三元树形结构描述模块接收离线软件生成的二进制文件ⅰ,并将所述二进制文件ⅰ的结构和内容采用三元树形结构进行表达,生成三元树形结构;所述xml语法配置模块,采用xml配置语法,描述三元树形结构描述模块生成的三元树形结构与值,编写得到xml配置文件;所述检查模块加载xml语法配置模块中生成的xml配置文件,生成三元树形结构中间数据ⅱ,具体为:检查模块利用组合设计模块,设计结构与上述三元树形结构相同的映射类;检查模块加载xml配置文件,根据xml语法模块中定义的xml配置语法,逐层解析xml配置文件结构,将xml配置文件中定义的各个字段的预期值填充入三元树形结构映射类中,各个字段的类型、占用字节数录入所述三元树形结构映射类中,从而生成所述三元树形结构中间数据ⅱ;
检查模块调用离线软件生成二进制文件的接口,利用该接口将上述生成的三元树形结构中间数据ⅱ输出成二进制文件ⅱ;若该接口无法输出二进制文件ⅱ,则判定为所述离线软件生成的二进制文件ⅰ错误;若输出二进制文件ⅱ,则将输出的二进制文件ⅱ和xml配置文件一起加载到检查模块中;检查模块根据xml文件定义内容检查所述二进制文件ⅱ生成是否正确;具体为:xml语法配置模块中编写的xml配置文件定义了二进制文件的结构以及各字段的预期值、占用字节长度和输出类型;检查模块依据xml配置文件中定义的内容,检查所述二进制文件ⅱ结构、预期值、占用字节长度和大小端输出格式是否与xml配置文件中定义的内容相匹配;若均匹配则判定为离线软件生成二进制文件ⅰ正确,若任一项不匹配则判定为离线软件生成二进制文件ⅰ错误。
17.所述三元树形结构描述模块是通过数组类型结点、结构体类型结点和简单类型结点表达二进制文件结构,数组类型结点下的多个孩子结点类型须一致,可以为数组结点、结构体结点、简单结点中的任意一种;结构体类型结点下的多个孩子结点类型为数组结点、结构体结点、简单结点中的一种或多种;简单类型结点即该树形结构中的叶子结点,该结点下不嵌套孩子结点,简单类型结点中设置有属性value,用以存储实际数据。
18.所述xml语法配置模块中,利用标签名称定义三元树形结构中对应的结点名称;利用style属性定义三元树形结构中对应结点的类型;利用export属性定义该结点是否需要输出到二进制文件中,对于数组类型和结构体类型结点,若结点export属性为false,则该结点下所有的孩子结点均不输出至二进制文件中;利用length属性定义数组类型结点的度,即该数组类型结点下孩子结点的个数,length属性定义简单类型结点中value属性值的字节长度;利用origin属性定义数组类型结点输出的起始索引下标;利用value属性定义简单类型结点中value属性值,value属性值的类型由该简单结点的style属性定义。
19.更进一步地,属性style的值为array、compound、long和string,array表示该结点在树形结构中为数组类型结点,compound表示该结点在树形结构中为结构体类型结点,long和string表示该结点为简单类型结点,long和string表示该简单类型结点中value属性值的类型。
20.所述检查模块中,将xml配置文件描述的三元树形结构转换为以面向对象程序设计语言中类的形式保存,即将xml配置文件中定义的三元树结构映射为检查模块内存中的类对象,所述类对象即为三元树结构中间数据ⅱ。
21.所述组合设计模式是将类通过继承和/或组合的关系构建成一种树形结构。
22.在检查模块调用离线软件生成二进制文件的接口时,只给此接口传递了二进制文件结构、每个字段的值,二进制文件中各个字段占用的字节长度和大小端输出格式信息均取自离线软件内部定义的结果,并且离线软件生成二进制文件接口在生成二进制文件时是以离线软件内部自定义的二进制文件结构输出二进制文件。
23.更进一步的,在离线软件生成二进制文件的接口的运行过程中,离线软件生成二进制文件的接口会检查xml配置文件定义的三元树形结构中间数据ⅱ与离线软件定义的二进制文件结构是否一致,不一致则不会生成二进制文件。
24.与现有技术相比,本发明所带来的有益的技术效果表现在:1、本发明是在人工检查文本文件后初步确认生成的二进制文件正确后,采用xml
配置文件定义二进制文件预期结果,并形成了完整的闭环检查链路。相比背景技术中的方案一,本发明利用xml配置文件检查离线软件生成二进制文件ⅰ的结果正确,本发明生成二进制文件ⅱ的数据源,检查二进制文件ⅰ正确性的标准数据均来源于xml配置文件,能够保证离线软件计算结果正确,并且生成二进制文件ⅰ内容也正确,且相较于现有技术的方案二而言,本发明的检测方法复用率高。
25.2、相比于背景技术中的方案二,本发明设计了一种三元树形结构能够适配任意结构的二进制文件,设计了一套通用的xml配置语法能够描述任意的三元树形结构,检查模块是基于此通用xml配置语法基础上开发的,因此检查模块能够适配任意结构的二进制文件,检查模块复用率高;检查模块加载xml配置文件生成三元树形结构中间数据ⅱ,经离线软件提供的统一输出接口将三元树形结构中间数据ⅱ输出成二进制文件ⅱ,再根据xml配置文件的预期值检查二进制文件ⅱ,不需要根据输入数据、运算逻辑推导正确的输出值,将输入与输出之间的依赖关系进行了解耦,大大提高了配置文件的复用率,并可通过设置各个字段的边界值,测试相关字段数据在边界值输出时的正确性。
26.3、在本发明中,步骤s2中xml配置文件定义了离线软件所生成的二进制文件的结构、每个字段的值以及所占用的字节长度(此为预期结果)。经过s3、s4步骤的处理,将xml配置文件定义的树形结构以及每个字段预期值转化为三元树形结构中间数据ⅱ,由离线软件生成二进制文件的接口将此三元树形结构中间数据ⅱ输出成二进制文件ⅱ(即s4中生成的二进制文件ⅱ),这里需要注意的是在调用离线软件生成二进制文件的接口时,只给此接口传递了二进制文件结构、每个字段的值,但二进制文件中各个字段占用的字节长度、大小端输出格式等信息取自离线软件内部定义的结果,并且离线软件生成二进制文件接口在生成二进制文件时也并不会以三元中间数据的结构输出,而是以离线软件内部自定义的二进制文件结构输出二进制,即在离线软件生成二进制文件接口运行过程中会检查xml配置文件定义的三元树形结构与离线软件定义的二进制文件结构是否一致,不一致则不会生成二进制文件。步骤s5这里检查s4步骤生成的二进制文件ⅱ,需要检查每个字段值是否正确、占用的字节数是否正确、大小端输出格式是否正确,这里检查的依据即为s2步骤中定义的xml配置文件。
27.4、在调用离线软件生成二进制文件接口时,仅仅是将xml文件中定义的各个字段的预期值传递给离线软件接口,让其输出二进制文件。检查软件根据xml配置文件中定义二进制文件结构、各个字段预期值、各个字段占用字节长度、大小端输出格式等预期信息,检查二进制文件结构、预期值、占用字节长度、大小端输出格式是否正确。
附图说明
28.图1为本发明背景技术中方案一的检查流程图;图2为本发明背景技术中方案二的检查流程图;图3为本发明基于xml的二进制文件检测方法流程图;图4为本发明基于xml的二进制文件检测装置结构示意图。
具体实施方式
29.下面结合说明书附图,对本发明的技术方案作出进一步详细地阐述。显然,所描述
的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
30.实施例1作为本发明一较佳实施例,参照说明书附图3,本实施例公开了基于xml的二进制文件检测方法,本文所称的离线软件可代指文件(《互联互通车载控制器离线数据自动生成方法研究》

铁道通信信号第56卷第11期,2020年11月)中生成离线数据的软件;本文所称的离线软件生成的二进制文件ⅰ代指上文中的离线数据。
31.如图3所示,中间数据ⅰ是离线软件结合输入数据和计算规则(逻辑运算)得到的等待输出的结构,离线软件包含有生成二进制文件的接口和生成文本文件的接口,离线软件根据中间数据ⅰ分别调用生成二进制文件的接口和生成文本文件的接口,分别生成二进制文件ⅰ和文本文件;现有的检查方式是:人工检查文本文件,以确保二进制文件ⅰ正确。但是这种检查方式,存在上述背景技术中提到的问题,若直接检查二进制文件ⅰ,则难度较大,主要有如下两方面原因:(1)二进制文件中的数据不易阅读,人工检查效率低;(2)二进制文件中的数据结构、各个字段占用字节长度多变,导致二进制文件结构经常变化。
32.本实施例提供的二进制文件检测方法,正是提供了一种直接对二进制文件进行检验的方法,本实施例是先将由离线软件生成的二进制文件ⅰ表述为一三元树形结构,然后通过xml配置语法,将该三元树形结构编写成xml配置文件,依据xml配置文件生成结构与中间数据ⅰ相同的中间数据ⅱ,中间数据ⅱ的值可与中间数据ⅰ的值不同,是否相同取决于xml配置文件中设置的各个字段期望值是否与中间数据ⅰ相同;中间数据ⅱ调用离线软件生成二进制文件的接口,输出二进制文件ⅱ,依据xml配置文件中的预期值按照指定的大端或者小端格式检查二进制文件ⅱ生成是否正确,从而确定离线软件生成的二进制文件ⅰ是否正确,即生成二进制文件ⅱ的数据源,检查二进制文件ⅰ正确性的标准数据均来源于xml配置文件,能够保证离线软件计算结果正确,并且生成二进制文件ⅰ内容也正确。
33.具体地,基于xml的二进制文件检测方法,包括以下步骤:步骤s1、采用三元树形结构完整表达由离线软件生成的二进制文件ⅰ的结构和内容;该二进制文件ⅰ,是有人工核对文本文件初步确认正确的二进制文件ⅰ;所述三元指的是此树形结构中包含三种不同类型的结点,分别为数组类型结点、结构体类型结点和简单类型结点;步骤s2、采用xml配置语法,描述步骤s1中三元树形结构与值,编写得到xml配置文件;步骤s3、依据步骤s2中生成的xml配置文件,生成三元树形结构中间数据ⅱ,具体为:利用组合设计模式,设计结构与步骤s1中定义的三元树形结构相同的映射类;加载步骤s2中生成的xml配置文件,根据步骤s2中定义的xml配置语法,逐层解析xml配置文件结构,将xml配置文件中定义的各个字段的预期值填充入三元树形结构映射类中,将xml配置文件中定义的各个字段的类型、占用字节数,录入所述三元树形结构映射类中,从而生成所述三元树形结构中间数据ⅱ;
步骤s4、调用离线软件生成二进制文件的接口,利用该接口将步骤s3中生成的三元树形结构中间数据ⅱ输出成二进制文件ⅱ;若无法输出二进制文件ⅱ,则判定为所述离线软件生成的二进制文件ⅰ错误;若输出二进制文件ⅱ,则进入步骤s5;步骤s5、根据xml文件定义内容检查所述二进制文件ⅱ生成是否正确;具体为:在步骤s2中,编写的xml配置文件中定义了二进制文件的结构以及各字段的预期值、占用字节长度和输出类型,依据xml配置文件中定义的内容,检查所述二进制文件ⅱ结构、预期值、占用字节长度和大小端输出格式是否与xml配置文件中定义的内容相匹配,若均匹配则判定为离线软件生成二进制文件ⅰ正确,若任一项不匹配则判定为离线软件生成二进制文件ⅰ错误。
34.作为本实施例的又一种实施方式,步骤s1中,所述三元树形结构是通过数组类型结点、结构体类型结点和简单类型结点表达二进制文件结构,其中数组类型结点下的多个孩子结点类型须一致,可以为数组结点、结构体结点、简单结点中的任意一种;结构体类型结点下的多个孩子结点类型为数组结点、结构体结点、简单结点中的一种或多种;简单类型结点即该树形结构中的叶子结点,该结点下不嵌套孩子结点,简单类型结点中设置有属性value,用以存储实际数据。
35.作为本实施例的又一种实施方式,步骤s2中,所述xml配置语法中,利用标签名称定义三元树形结构中对应的结点名称;利用style属性定义三元树形结构中对应结点的类型;利用export属性定义该结点是否需要输出到二进制文件中,对于数组类型和结构体类型结点,若结点export属性为false,则该结点下所有的孩子结点均不输出至二进制文件中;利用length属性定义数组类型结点的度,即该数组类型结点下孩子结点的个数,length属性定义简单类型结点中value属性值的字节长度;利用origin属性定义数组类型结点输出的起始索引下标;利用value属性定义简单类型结点中value属性值,value属性值的类型由该简单结点的style属性定义。
36.更进一步地,属性style的值为array、compound、long和string,array表示该结点在树形结构中为数组类型结点,compound表示该结点在树形结构中为结构体类型结点,long和string表示该结点为简单类型结点,long和string表示该简单类型结点中value属性值的类型。
37.作为本实施例的又一种实施方式,所述步骤s3中,具体为:将xml配置文件描述的三元树形结构转换为以面向对象程序设计语言中类的形式保存,即将xml配置文件中定义的三元树结构映射为内存中的类对象,所述类对象即为三元树结构中间数据ⅱ。步骤s3中所述的组合设计模式是将类通过继承和/或组合的关系构建成一种树形结构。
38.在调用离线软件生成二进制文件的接口时,只给此接口传递了二进制文件结构、每个字段的值,二进制文件中各个字段占用的字节长度和大小端输出格式信息均取自离线软件内部定义的结果,并且离线软件生成二进制文件接口在生成二进制文件时是以离线软件内部自定义的二进制文件结构输出二进制文件。
39.进一步的,在离线软件生成二进制文件的接口的运行过程中,离线软件生成二进制文件的接口会检查xml配置文件定义的三元树形结构中间数据ⅱ与离线软件定义的二进制文件结构是否一致,不一致则不会生成二进制文件。
40.实施例2
作为本发明又一较佳实施例,参照说明书附图3,在本实施例中,步骤s2中xml配置文件定义了离线软件所生成的二进制文件的结构、每个字段的值以及所占用的字节长度(此为预期结果)。经过s3、s4步骤的处理,将xml配置文件定义的树形结构以及每个字段预期值转化为三元树形结构中间数据ⅱ,由离线软件生成二进制文件的接口将此三元树形结构中间数据ⅱ输出成二进制文件ⅱ(即s4中生成的二进制文件ⅱ),这里需要注意的是在调用离线软件生成二进制文件的接口时,只给此接口传递了二进制文件结构、每个字段的值,但二进制文件中各个字段占用的字节长度、大小端输出格式等信息取自离线软件内部定义的结果,并且离线软件生成二进制文件接口在生成二进制文件时也并不会以三元中间数据的结构输出,而是以离线软件内部自定义的二进制文件结构输出二进制,即在离线软件生成二进制文件接口运行过程中会检查xml配置文件定义的三元树形结构与离线软件定义的二进制文件结构是否一致,不一致则不会生成二进制文件。步骤s5这里检查s4步骤生成的二进制文件ⅱ,需要检查每个字段值是否正确、占用的字节数是否正确、大小端输出格式是否正确,这里检查的依据即为s2步骤中定义的xml配置文件。
41.在调用离线软件生成二进制文件接口时,仅仅是将xml文件中定义的各个字段的预期值传递给离线软件接口,让其输出二进制文件。检查软件根据xml配置文件中定义二进制文件结构、各个字段预期值、各个字段占用字节长度、大小端输出格式等预期信息,检查二进制文件结构、预期值、占用字节长度、大小端输出格式是否正确。
42.实施例3作为本发明又一较佳实施例,参照说明书附图4,本实施例公开了一种基于xml的二进制文件检测装置,包括三元树形结构描述模块、xml语法配置模块和检查模块;三元树形结构描述模块接收离线软件生成的二进制文件ⅰ,并将所述二进制文件ⅰ的结构和内容采用三元树形结构进行表达,生成三元树形结构;所述xml语法配置模块,采用xml配置语法,描述三元树形结构描述模块生成的三元树形结构与值,编写得到xml配置文件;所述检查模块加载xml语法配置模块中生成的xml配置文件,生成三元树形结构中间数据ⅱ,具体为:检查模块利用组合设计模块,设计结构与上述三元树形结构相同的映射类;检查模块加载xml配置文件,根据xml语法模块中定义的xml配置语法,逐层解析xml配置文件结构,将xml配置文件中定义的各个字段的预期值填充入三元树形结构映射类中,各个字段的类型、占用字节数录入所述三元树形结构映射类中,从而生成所述三元树形结构中间数据ⅱ;检查模块调用离线软件生成二进制文件的接口,利用该接口将上述生成的三元树形结构中间数据ⅱ输出成二进制文件ⅱ;若该接口无法输出二进制文件ⅱ,则判定为所述离线软件生成的二进制文件ⅰ错误;若输出二进制文件ⅱ,则将输出的二进制文件ⅱ和xml配置文件一起加载到检查模块中;检查模块根据xml文件定义内容检查所述二进制文件ⅱ生成是否正确;具体为:xml语法配置模块中编写的xml配置文件定义了二进制文件的结构以及各字段的预期值、占用字节长度和输出类型;检查模块依据xml配置文件中定义的内容,检查所述二进制文件ⅱ结构、预期值、占用字节长度和大小端输出格式是否与xml配置文件中定义的内容相匹配;若均匹配则判定为离线软件生成二进制文件ⅰ正确,若任一项不匹配则判定为离
线软件生成二进制文件ⅰ错误。
43.作为本实施例的一种实施方式,所述三元树形结构描述模块是通过数组类型结点、结构体类型结点和简单类型结点表达二进制文件结构,其中数组类型结点下的多个孩子结点类型须一致,可以为数组结点、结构体结点、简单结点中的任意一种;结构体类型结点下的多个孩子结点类型为数组结点、结构体结点、简单结点中的一种或多种;简单类型结点即该树形结构中的叶子结点,该结点下不嵌套孩子结点,简单类型结点中设置有属性value,用以存储实际数据。
44.作为本实施例的又一种实施方式,所述xml语法配置模块中,利用标签名称定义三元树形结构中对应的结点名称;利用style属性定义三元树形结构中对应结点的类型;利用export属性定义该结点是否需要输出到二进制文件中,对于数组类型和结构体类型结点,若结点export属性为false,则该结点下所有的孩子结点均不输出至二进制文件中;利用length属性定义数组类型结点的度,即该数组类型结点下孩子结点的个数,length属性定义简单类型结点中value属性值的字节长度;利用origin属性定义数组类型结点输出的起始索引下标;利用value属性定义简单类型结点中value属性值,value属性值的类型由该简单结点的style属性定义。
45.更进一步地,属性style的值为array、compound、long和string,array表示该结点在树形结构中为数组类型结点,compound表示该结点在树形结构中为结构体类型结点,long和string表示该结点为简单类型结点,long和string表示该简单类型结点中value属性值的类型。
46.作为本实施例的又一种实施方式,所述检查模块中,将xml配置文件描述的三元树形结构转换为以面向对象程序设计语言中类的形式保存,即将xml配置文件中定义的三元树结构映射为检查模块内存中的类对象,所述类对象即为三元树结构中间数据ⅱ。
47.作为本实施例的又一种实施方式,所述组合设计模式是将类通过继承和/或组合的关系构建成一种树形结构。
48.作为本实施例的又一种实施方式,在检查模块调用离线软件生成二进制文件的接口时,只给此接口传递了二进制文件结构、每个字段的值,二进制文件中各个字段占用的字节长度和大小端输出格式信息均取自离线软件内部定义的结果,并且离线软件生成二进制文件接口在生成二进制文件时是以离线软件内部自定义的二进制文件结构输出二进制文件。
49.更进一步的,在离线软件生成二进制文件的接口的运行过程中,离线软件生成二进制文件的接口会检查xml配置文件定义的三元树形结构中间数据ⅱ与离线软件定义的二进制文件结构是否一致,不一致则不会生成二进制文件。
转载请注明原文地址: https://doc.8miu.com/read-1350195.html

最新回复(0)