基于约束校验的内存格式化方法
技术领域
本发明涉及计算机文件处理技术领域,特别涉及一种基于约束校验的内存格式化方法。
背景技术
通过配置文件读取需要经常变化的参数信息是计算机系统使用的常用方法。被广泛的使用在各种需要人机交互的软件系统当中。软件的使用者将所需的参数信息,按照一定的格式编写在文本文件中,计算机软件在启动或者使用这些参数之前,通过读取文件将信息读入内存当中,并进行相应的解析和处理。
单纯的将参数信息保存进配置文件,虽然简单直接,但是并不利于使用者记忆和识别,所以逐渐发展成名值对形式的配置文件,例如“NAME=XYZ”等等。随着软件系统越来越复杂,提供的功能越来越多,简单的配置描述方法无法满足复杂的业务需求,所以逐渐发展出具有一定格式化要求的配置文件,用以进行具有一定关联关系的复杂参数表示方法。同时由于软件系统的发展要求,配置的内容总是在不断变化的,这就需要对配置文件的格式能灵活的变化;同时随着配置信息内容越来越复杂,信息之间的关联关系变得越来越复杂,配置内容出错的概率变得非常高,一旦配置出错,就影响整个软件系统的运行。
在实现本发明的过程当中,发明人发现现在通行的INI和XML文件虽然部分解决了以上的问题,但是依然存在着自己的局限性。INI文件通过“[]”来描述配置小节,将参数信息进行简单的分类处理,但是无法表示具有复杂依赖关系和多层次小节关系的参数。而XML文件虽然非常的灵活,可以适应各种配置需要,但是它的语法表达过于复杂,不利于使用者快速的学习记忆;并且对XML的支持主要集中在java语言,对C语言的相关支持比较少,无法适应跨平台的需要。最重要的是以上的两种配置方法,都没有对配置校验提供完整的解决方案,所有的工作都要人工编码完成。随着业务需求的不断提出和不断更新变化,产品配置文件的配置内容也随之不断增加,配置文件的复杂度也不断增加。为了实现对配置文件内容的一系列合法校验,比如对配置文件中各类名称的唯一性校验、配置小节和配置记录之间层级从属关系的约束校验,不同配置单元上下文依赖关系的约束校验等,均须相应增加大量的校验流程。实现这些新增校验流程的过程,耗费了大量的工作量,且极容易出现纰漏,增加了产品出现bug的概率,并使开发的效率大大降低。
在实现本发明的过程当中,发明人还发现对于配置文件的使用,往往是和内存资源对象的创建和赋值相关联的。从配置中读取的参数信息,用于创建相关的内存对象,或对特定的内存对象赋值。而这些工作目前没有通用抽象的方法可供使用,往往需要人工编程来实现。另外随着业务需求的不断提出和不断更新变化,产品核心内存结构也经常需要合理化调整,实现这个调整过程,极易出现各种遗漏,比如尺寸计算和格式序列化不一致,显示内容和实际结构不一致,结构体个数与预期不一致等,使得内存指针位置发生错乱,从而导致产品出现重大缺陷。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何自动化地批量实现对配置文件的约束校验及对配置文件中的结构体对应的内存结构进行格式化。
(二)技术方案
为解决上述技术问题,本发明提供了一种基于约束校验的内存格式化方法,包括以下步骤:
S1:根据配置文件的配置小节、配置记录和配置项各自的内存结构体名称、数量及结构体变量名称分配内存结构;
S2:根据配置文件对应的配置校验脚本校验所述配置文件;
S3:将校验通过的配置文件中的配置项值赋值给所述内存结构。
其中,所述步骤S1具体包括:
S1.1:根据配置文件读取所述配置文件对应的内存格式脚本,所述内存格式脚本中设置了配置文件中配置小节、配置记录和配置项各自的内存结构体名称、数量及结构体变量名称;
S1.2:解析所述内存格式脚本,根据内存格式脚本的内容为所述配置文件分配内存结构。
其中,所述步骤S1.2具体包括:
根据内存格式脚本内容中的各个结构体变量和数量计算内存尺寸;
将按所述尺寸申请成功的内存空间逐项分配给格式化脚本内容中的指针变量;
逐项显示各个已经分配好内存空间的指针变量地址。
其中,在计算内存尺寸和进行内存地址偏移时,均以8bytes为格式化最小尺寸单元,构体单个尺寸乘以结构体个数,结果若不是8的整数倍,则加上余数,使之占据的内存空间大小为8bytes的整数倍。
其中,所述步骤S2具体包括:
S2.1:读取所述配置文件对应的配置校验脚本,所述配置校验脚本设置了配置文件中配置小节、配置记录和配置项各自的约束校验规则;
S2.2:根据所述约束校验规则校验所述配置文件。
其中,所述步骤S2.2具体包括:
S2.2.1:解析配置校验脚本中有效行的前导符,注释行的前导符;
S2.2.2:解析与所述配置文件的配置小节对应的约束校验规则行的前导符;
S2.2.3:解析与所述配置小节的配置记录对应的约束校验规则行的前导符;
S2.2.4:解析与所述配置记录的配置项对应的约束校验规则行的前导符;
S2.2.5:根据不同的前导符解析出配置小节、配置记录和配置项各自的约束校验规则对应的保留字,及配置项对应的值;
S2.2.6:根据所述配置小节、配置记录和配置项各自的约束校验规则对应的保留字,及配置项对应的值校验配置文件中的配置小节、配置记录和配置项。
其中,校验配置文件时,还包括手工添加校验项对配置文件进行校验。
(三)有益效果
本发明通过配置校验脚本生成校验代码对配置文件校验,通过内存格式脚本分配内存结构,并以校验通过的配置文件中的配置小节、配置记录和配置项来格式化内存结构,从而自动化地批量实现对配置文件的约束校验及对配置文件中的结构体对应的内存结构进行格式化。同时避免了因为业务需求的变化而调整配置文件格式和内存格式序列时必须进行的大量流程调整,且避免了因为手工修改遗漏所导致的问题。
附图说明
图1是本发明实施例的一种基于约束校验的内存格式化方法流程图;
图2是本发明实施例的配置文件的格式内容;
图3是本发明实施例的内容格式脚本的格式内容;
图4是本发明实施例的配置校验脚本的格式内容。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1所示,本实施例的基于约束校验的内存格式化方法包括:
步骤S101,根据配置文件的配置小节、配置记录和配置项各自的内存结构体名称、数量及结构体变量名称分配内存结构。如图2所示,为本实施例中的一种配置文件,图中示出了一部分内容,包括三部分内容:配置小节(如:ClusterQue)、配置记录(如:ClusterQueRecord和ClusterQueDestination)、配置项(如:ClusterDestination和Weight),其关系为:每一个“配置小节”可以包括多种“配置记录”,每一种“配置记录”可以为多条,每一条“配置记录”包含多个“配置项”。配置小节和配置记录表明了配置项值的路径。该步骤具体包括:
读取所述配置文件对应的内存格式脚本,所述内存格式脚本中设置了配置文件中配置小节、配置记录和配置项各自的内存结构体名称、数量及结构体变量名称。如图3所示,为内存格式脚本的内容,包括:内存结构体名称(如:SEND_QUE)、内存结构体数量(如:宏定义名SNDQMAXNUM)、内存结构体变量名称(如:gSndQ)。
解析所述内存格式脚本,根据内存格式脚本的内容为所述配置文件分配内存结构。具体包括:
根据内存格式脚本内容中的各个结构体变量和数量计算内存尺寸。结构体变量类型确定后,其尺寸也就确定了,根据其数量便可计算出所需内存的总尺寸。
将按所述尺寸申请成功的内存空间逐项分配给格式化脚本内容中的指针变量;
逐项显示各个已经分配好内存空间的指针变量地址,指针变量地址表示了内存地址偏移。
本实施例中,解释内存格式脚本后,会生成一个内存格式化文件,该文件包括计算内存尺寸和偏移的函数。这样就可以保证一次修改配置,即可同步修改内存尺寸和内存地址偏移,确保内存格式变化之后的准确性,简化了操作步骤,提高了产品质量。
在计算内存尺寸和进行内存地址偏移时,均以8bytes为格式化最小尺寸单元,即:某结构体单个尺寸乘以结构体个数,结果如果不是8的整数倍,则加上余数,使之占据的内存空间大小为8bytes的整数倍。
步骤S102:根据配置文件对应的配置校验脚本生成用于校验所述配置文件的校验代码。如图4所示,为本实施例中的与图2中配置文件对应的配置校验脚本内容。其中约定了图2中配置文件的配置小节以及配置记录之间的从属和约束校验关系。具体包括:配置小节名称的定义,配置小节描述体的定义,配置小节必输性的约束定义,配置小节前置校验的约束定义,配置小节后置校验的约束定义,配置记录名称的定义,配置记录对应结构体的定义,配置记录对应的变量名称定义;还约定了配置记录中各配置项键值的约束校验方式,具体包括:配置项键值名称的约束校验定义,配置项数据类型和长度的约束校验定义,配置项键值唯一性的约束校验定义,配置项必输性的约束校验定义,配置项字段名称的定义,配置项默认数值的约束定义,配置项动态修改的约束定义,配置项描述体的定义,配置项取值范围的约束校验定义。
生成校验代码的具体步骤包括:
读取所述配置文件对应的配置校验脚本,所述配置校验脚本设置了配置文件中配置小节、配置记录和配置项各自的约束校验规则。
根据所述约束校验规则校验所述配置文件。该步骤具体包括:
解析配置校验脚本中有效行的前导符,注释行的前导符;
解析与所述配置文件的配置小节对应的约束校验规则行的前导符,如图4中:前导符“SEC-NAME=ClusterQue”,其后为配置小节的校验规则的脚本内容。
解析与所述配置小节的配置记录对应的约束校验规则行的前导符,如图4中:前导符“RCD-NAME=ClusterQueDestination”,其后为配置记录的校验规则的脚本内容。
解析与所述配置记录的配置项对应的约束校验规则行的前导符,如图4中:前导符为“#KeyName”,其后为配置项的校验规则的脚本内容。
根据不同的前导符解析出配置小节、配置记录和配置项各自的约束校验规则对应的保留字,及配置项对应的值。
根据所述配置小节、配置记录和配置项各自的约束校验规则对应的保留字,及配置项对应的值校验配置文件中的配置小节、配置记录和配置项,即配置文件中的配置小节、配置记录和配置项是否符合配置校验脚本中定义的约束校验规则。
本实施例中,解释配置校验脚本后,会生成一个校验文件,主要包括:配置小节校验子模块、配置记录校验子模块、配置项校验子模块的功能函数。
该文件还包括以下内容:
配置小节、配置记录、配置项各自对应的结构体变量定义;
配置小节、配置记录、配置项各自对应的结构体的个数定义;
每条配置记录对应的序号变量定义;
各配置项取值范围数组定义;
配置小节、配置记录、配置项各自对应的约束校验关系数组。
该“约束校验关系数组”,其数组成员中,除了对配置内容进行唯一性、从属关系、数据类型、取值范围、上下文依赖关系等计算机可自动识别的关键属性进行自动校验之外,另包括一个自定义校验函数指针。该自定义校验函数,缺省是一个空函数,该函数在业务系统其他位置进行定义。如需要对指定的配置内容进行特殊的校验扩展,可通过手工,在此处的校验功能体中进行具体定义。此项特点极大地提高了该自动装置的可扩展性,使得对配置文件的约束校验覆盖面达到一个无盲点的程度。
步骤S103:将校验通过的配置文件中的配置项值赋值给所述内存结构,完成内存的格式化。
本发明实施例通过简单的定义脚本文件的步骤,即可自动生成对配置文件格式和内容进行校验的源码文件,以及自动生成内存格式化的源码文件。避免了因为业务需求的变化而调整配置文件格式和内存格式序列时必须进行的大量流程调整,提高了生产效率,且降低和避免了因为手工遗漏所导致的产品缺陷,进一步提高了产品质量。本发明实施例中涉及自动生成配置校验和内存格式化代码的方法,具备使用简单,可扩展性强,和业务系统耦合度低,可移植性和可复用性强等特点。本发明实施例中,使用者只需要手工编辑一个简单的脚本文件,即可自动生成一系列包含了复杂流程的源码文件,而不必担心出现人工遗漏和未同步修改所有内容的现象出现,大大提高了开发工作效率,提高了产品质量,降低了产品代码的维护成本,减少的产品出现bug的概率。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。