一种数据文件引擎的实现方法

文档序号:6602316阅读:175来源:国知局

专利名称::一种数据文件引擎的实现方法
技术领域
:本发明属于数据处理领域,尤其涉及一种数据文件引擎的实现方法。
背景技术
:数据文件是专门用来存放数据的文件,是一种新的构造数据类型,它是以文件的形式存储在某种介质(如磁盘、光盘等)上的一批彼此相关的数据。它又是不同于源程序文件的一种新的文件。数据文件的扩展名通常冠以“.DAT”或“.TXT”等。数据文件的引入使我们可以方便的处理大量的数据信息。因为数据文件是存放在磁盘上的,它的长度不受内存的限制,所以常用来处理仓库、图书、金融账户等信息问题。另外,我们使用数据文件可以实现数据的共享。现有的数据文件引擎只是根据某一固定格式对文件进行分析和生成处理,且不支持动态管理操作中的文件,移植性和易用性较差,一旦要处理的文件格式与现有的格式不相同或平台比较特殊,就需要重新设计和开发,浪费人力、物力。
发明内容针对上述技术缺陷,现提出一种数据文件引擎的实现方法,技术方案具体如下一种数据文件引擎的实现方法,所述方法包括数据文件的生成及解析两个过程所述数据文件的生成过程为构造所述数据文件的文件头及文件块表;将文件标识、版本号、文件创建时间、文件最后修改时间填充到所述文件头中;将文件块类型、Verify标记、文件块对齐大小、文件块偏移量、文件块大小、文件块对齐后大小填充到所述文件块表中;将文件块数量、文件块表偏移量、CRC校验码填充到所述文件头中;根据所述文件块偏移量,将用户数据写入到所述数据文件的文件块中。所述数据文件的解析过程为获取数据文件,所述数据文件包括文件头、文件块表、文件块;对所述数据文件中的文件头进行解析,得到文件标识、文件块数量、文件块表偏移量、CRC校验码;根据所述解析得到的文件块表偏移量解析文件块表,得到文件块偏移量、文件块大小;根据所述解析得到的文件块偏移量及文件块大小解析文件块,得到所述文件块内容。将文件标识、版本号、文件创建时间、文件最后修改时间填充到所述文件头中具体为在所述构造的文件头中的第一个字节位置上填充文件标识;在所述文件标识的下一个字节位置上填充版本号;从所述版本号的下一个字节位置开始连续跳过包含所述版本号的下一个字节位置在内的五个字节位置后,在所述文件标识之后的第六个字节位置开始的连续八个字节位置上填充文件创建时间;在所述文件创建时间的下一个字节位置开始的连续八个字节位置上填充文件最后修改时间;将文件块类型、Verify标记、文件块对齐大小、文件块偏移量、文件块大小、文件块对齐后大小填充到所述文件块表中具体为在所述构造的文件块表中的第一个字节位置上填充文件块类型;在所述文件块类型的下一个字节位置上填充Verify标记;从所述Verify标记的下一个字节位置开始连续跳过包含所述Verify标记的下一个字节位置在内的两个字节位置后,在所述Verify标记之后的第三个字节位置开始的连续两个字节位置上填充文件块对齐大小;在所述文件块对齐大小的下一个字节位置开始的连续四个字节位置上填充文件块偏移量;在所述文件块偏移量的下一个字节位置开始的连续四个字节位置上填充文件块大小;在所述文件块大小的下一个字节位置开始的连续四个字节位置上填充文件块对齐后大小。将文件块数量、文件块表偏移量、CRC校验码填充到所述文件头中具体为在所述文件创建时间的下一个字节位置开始的连续两个字节位置上填充文件块数量;在所述文件块数量的下一个字节位置开始的连续两个字节位置上填充文件块表偏移量;在所述文件块表偏移量的下一个字节位置开始的连续四个字节位置上填充CRC校验码。根据所述文件块偏移量,将所述用户数据写入到所述数据文件的文件块中,之前还包括判断用户数据的大小是否大于所述文件块大小,如果大于,则返回错误;否则,根据所述文件块偏移量,将所述用户数据写入到所述文件块中。根据所述文件块偏移量,将所述用户数据写入到所述文件块中具体为判断预先设置的填充方式是从零偏移量还是指定偏移量处将所述用户数据写入到所述文件块中,如果是零偏移量处,则从所述文件块偏移量开始,将所述用户数据写入到所述文件块中;如果是指定偏移量处,则计算所述文件块偏移量与所述指定偏移量的算术和,得到第一偏移量,并从所述第一偏移量开始,将所述用户数据写入到所述文件块中。将所述用户数据写入到所述文件块中具体为将所述用户数据按4KB大小进行分页处理,然后,将所述用户数据按页写入到所述文件块中。所述方法还包括将文件类型、文件头长度填充到所述文件头中。将文件类型、文件头长度填充到所述文件头中具体为跳过所述版本号的下一个字节位置,在所述版本号之后的第二个字节位置开始的连续两个字节位置上填充文件类型;在所述文件类型的下一个字节位置开始的连续两个字节位置上填充文件头长度。所述文件标识、版本号、文件块对齐大小是预先设定的;所述文件创建时间、文件最后修改时间、文件类型、文件块类型、Verify标记、文件块大小是由计算机获取的;所述文件块表偏移量是根据所述文件头长度来确定的,所述文件头长度是固定值;所述文件块偏移量是由所述文件头长度及文件块表长度来确定的,所述文件块表长度是固定值。对所述数据文件中的文件头进行解析,得到文件标识、文件块数量、文件块表偏移量、CRC校验码具体为根据所述数据文件中的第一个字节连续获取包含所述第一个字节在内的两个字节长度的数据,得到所述数据文件的文件头中的文件标识;根据所述文件标识的下一个字节连续跳过包含所述文件标识的下一个字节在内的二十二个字节长度的数据后,获取从所述文件标识之后的第二十三个字节开始的连续两个字节的数据,得到所述数据文件的文件头中的文件块数量;根据所述文件块数量的下一个字节连续获取包含所述文件块数量的下一个字节在内的二个字节的数据,得到所述数据文件的文件头中的文件块表偏移量;根据所述文件块表偏移量的下一字节获取包含所述文件块表偏移量的下一字节在内的连续四个字节长度的数据,得到所述数据文件的文件头中的CRC校验。根据所述解析得到的文件块表偏移量解析文件块表,得到文件块偏移量、文件块大小具体为从所述文件块表偏移量开始,连续跳过六个字节的数据后,获取从第七个字节开始的连续四个字节的数据,得到所述数据文件的文件块表中的文件块偏移量;根据所述文件块偏移量的下一个字节连续跳过包含所述文件块偏移量在内的四个字节的数据后,获取从第五个字节开始的连续四个字节的数据,得到所述数据文件的文件块表中的文件块大小。根据所述解析得到的文件块偏移量及文件块大小解析文件块,得到所述文件块内容具体为从所述文件块偏移量开始,获取与所述文件块大小相同大小的字节数据,并将所述获取的字节数据存储在缓冲区中。所述数据文件的解析过程还包括获取所述文件标识的下一个字节长度的数据,得到文件头中的版本号;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的两个字节的数据,获取包含从所述文件标识之后第三个字节开始的连续两个字节长度的数据,得到文件头中的文件类型;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的四个字节长度的数据后,连续获取两个字节长度的数据,得到文件头中的文件头长度;所述文件头长度用于快速定位文件头和文件块表;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的六个字节长度的数据后,连续获取八个字节长度的数据,得到文件头中的文件创建时间;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的十四个字节长度的数据后,获取连续八个字节长度的数据,得到文件头中的文件最后修改时间;所述方法还包括判断所述文件标识与计算机中预置的标识是否一致;当判断结果为一致时,继续获取所述数据文件的文件头中的版本号;当判断结果为不一致时,结束操作。所述判断方法具体为将所述计算机中预置的标识经ASCII码转换,得到16进制的ASCII码标识;将所述文件标识与所述16进制的ASCII码标识相比较;如果相同,则判断结果为一致;如果不同,则判断结果为不一致。所述方法还包括判断CRC校验是否正确,如果正确,继续获取数据文件的文件块表中的文件块偏移量的操作;如果不正确,结束操作。所述数据文件的解析过程还包括从文件块表偏移量开始,获取一个字节长度的数据,得到所述数据文件的文件块表中的文件块类型;和/或从所述文件块表偏移量开始,跳过一个字节的数据之后,获取从第二个字节开始的一个字节的数据,得到所述数据文件的文件块表中的Verify标记;和/或从所述文件块表偏移量开始,跳过四个字节的数据之后,获取从第五个字节开始的连续两个字节的数据,得到所述数据文件的文件块表中的文件块对齐大小;和/或根据所述文件块大小的下一个字节连续获取包括所述文件块大小的下一个字节在内的四个字节长度的数据,得到所述数据文件的文件块表中的文件块对齐后大小。有益效果本发明所提供的数据文件引擎具有灵活性、稳定性、移植性三大基本特性,且基础特性和高级特性之间耦合度低,改变数据的抽象方式、文件的格式等等均只需修改对应的一小部分代码,减少了维护的工作量。图1是本发明实施例1提供的一种数据文件的生成方法的流程图;图2是本发明实施例2提供的一种数据文件的解析方法的流程图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式做进一步的描述。实施例1表一示意性地给出了本发明数据文件的框架构成,包括文件头、文件块表、文件块,但并不受文件头、文件块表、文件块组成顺序的影响。表一文件头文件块表文件块如表一所示,文件头描述了整个数据文件,包括但不限于下列信息中的一项或多项文件标识(如“FT”)、版本号、文件类型、文件头大小Length、文件创建时间Creationtime、文件最后修改时间LastWriteTime、文件块数量、文件块表偏移量、循环冗余校验码CRC(CyclicRedundancyCheck)。文件块表连续存放,用于描述文件块,它的每一条记录都唯一的对应了一个文件块,一条记录包含有文件块类型、Verify标记、文件块对齐大小、文件块偏移量、文件块大小、文件块对齐后大小。需要说明的是,如果一个文件块需要其他辅助区块对其进行验证,那么就要在文件块表中设置Verify标记及Verify的文件块号。文件块用于存放数据,它可以是单个文件、文件的一部分或者用户自定义的一段数据等。其中,文件块表偏移量定位了文件块表,文件块偏移量定位了文件块。其中,文件头字节长度与文件块表字节长度是固定的,分别为32字节和18字节。参见图1,本实施例提供了一种数据文件引擎的实现方法,用于将用户数据封装成上述格式的数据文件(以下简称文件),包括动态生成和维护文件头、文件块表;首先,构建文件结构图,然后,将用户数据写入到文件中;其中,文件结构图为文件的索引图,包含文件头、文件块表;文件块表包含文件块记录;文件块记录用于描述文件块,并与文件块一一对应;文件由文件id来识别,文件块由文件块id来识别。具体技术方案如下步骤101进行初始化操作;具体地,检查内存中是否有闲置的文件id,如果有,则释放闲置的文件id。步骤102创建文件,并为创建的文件分配文件头和文件块表;具体地,根据用户提供的文件名,在当前目录(提供的文件名不包含路径)或在指定目录下(提供的文件名包含路径)创建文件,如果同名文件已存在,则删除所述同名文件后再创建;其中,文件名可以带任意后缀,如.txt、.doc等,也可以不带后缀。具体还包括,为创建的文件分配唯一的文件id。步骤103申请内存,为上述分配的文件头和文件块表分配内存空间,构建出文件结构图;其中,构建的结构图中的文件头及文件块表的格式如表二及表三所示。表二<table>tableseeoriginaldocumentpage11</column></row><table><table>tableseeoriginaldocumentpage12</column></row><table>步骤104填充文件头及初始化文件块表;具体地,依次将文件标识、版本号、文件类型、文件头字节长度Length、文件创建时间、文件最后修改时间填入到构建的文件头(表二)中的相应位置。其中,文件标识、版本号是预先设定的;本发明中,文件标识为”FT”、版本号为“01”。具体地,由计算机来获取文件类型、文件创建时间、文件最后修改时间,例如,文件类型为“JFIF“,获取的文件创建时间为“2010.4.914:15:00”、文件最后修改时间为“2010.4.917:22:00”,并将其转换为十六进制后填充到文件头中的相应位置。需要说明的是,文件头长度是在本发明数据文件升级的情况下,用于快速定位文件块表和文件块;通常情况下使用缺省值。还需要说明的是,文件头中的文件块数量、文件块表偏移量、CRC校验码字段此时被填充为0,留待在磁盘上生成文件时再填充具体内容。初始化文件块表具体为,将文件块表的内容填充为0。步骤105获取文件块的描述信息,对初始化后的文件块表进行填充;具体地,依次将文件块类型、Verify标记、文件块对齐大小、文件块大小、文件块对齐后大小填充到文件块记录(表三)中的相应位置;需要说明是,文件块类型的标识号是预先设定的,例如,文件块SignatureSection为签名区块,类型标识为“0x01“,文件块RockeyInfosection用于存放密钥信息,类型标识为“0x02“,文件块DataSection是数据区块,类型标识为“0x03“。如表四所示表四<table>tableseeoriginaldocumentpage12</column></row><table>还需要说明的是,Verify标记是预先设定的,例如,文件块不需要其他辅助区块对其进行校验时,Verify标记为“0x00“,文件块对文件块自身进行校验时,Verify标记为"0x01“等。如表五所示表五<table>tableseeoriginaldocumentpage13</column></row><table>具体地,文件块类型、Verify标记由计算机来获取。具体地,文件块对齐大小是预先设定的,本实例中,文件块以4KB大小对齐,即当文件块数据不足4KB的部分用0补齐。例如,用户提供的文件块为SignatureSection,其中,SignatureSection主要用于对文件头和文件块表做防篡改校验,或对特定文件块做解密校验,如可以对DataSection做解密用,则将文件块类型"0x01“、Verify标记“0x02”、文件块对齐大小"0x1000“、及SignatureSection的真实大小,如“0x1024“等依次填充到表三中相应的位置。再例如,用户提供的文件块为DataSection,其中,DataSection是用于存放加密后的数据文件的,可以将该文件块放在文件的开始或者末尾,本实例中放在文件的末尾处,则将文件块类型“0x03“、Verify标记“0x00”、文件块对齐大小“0x1000“、及DataSection的真实大小,如“0x129c“等信息填充到表三中相应的位置。需要说明的是,在文件结构图中可以对文件块进行诸如添加、修改、枚举、移除等操作。步骤106、将文件块数量、文件块表偏移量、CRC码填充到文件头中;具体地,根据用户提供的文件块数量来填充文件头中的文件块数量字段,例如,用户仅提供了一个文件块DataSection,则将“0x01“填充到文件头中的文件块数量字段中,用户提供了三个文件块,则将“0x03“填充到文件头中文件块数量字段中等。具体地,根据文件头大小来确定文件块表偏移量,本发明中,文件头字节大小为32字节,十六进制表示为“0x20“,则文件块表偏移量为”0x20“;具体地,CRC字段填充为文件块表与文件块的CRC校验和;步骤107获取用户数据,并判断用户数据的大小是否超出了所要填充的文件块的大小,如果是,则返回错误,否则,执行步骤108;具体地,根据用户提供的文件块id来确定用户所要填充的文件块,并读取该文件块的文件块记录,根据读取的文件块记录中描述的文件块大小来判断获取的数据大小是否超出了所要填充的文件块的大小,如果获取的数据大小大于文件块记录中所描述的文件块大小,则获取的数据大小超出了用户所要填充的文件块的预设存储空间。例如,用户要对文件块DataSection进行填充,获取的用户提供的用于填充该文件块的数据具体为46575305eed317007800055f0000OfaOOO000ca92c4302ffffffIf060000243124616624475a45654639394c374e676d36537238397964545530008604272696038506bf002900000001007f9eb751Ieb914c880000000000000000000000000000000000000000000000000000085f5e0b63669e5c8daa9a9699b86026b100bed49f7bd3005a366ba6009023d89c47d74672a743f15ec945e3f6685f5eOb63669e5c8daa9a9699b86026b100bed49f7bd3005a366ba6009023d89c47d74672a743f15ec945e3f66009602000800Ic960500070600000049129d020006008102000800069602000800Ic96050007Id00000049129d02000600810200If00069602000800Ic960500073d00000049129d020006008102003f00069602000800Ic960500075d00000049129d0200060081020060000600910616Oe004700cd1999a333339bOf6658b9014000000016Oe004700cd1999a333339bOf6658b90140000000000000000000000000000000,则所获取的数据大小为366字节,读取文件块DataSection的文件块记录可知,文件块记录中描述的文件块大小为0x129c字节,即获取的数据大小并没有超过文件块DataSection的预设存储空间。具体地,可以由计算机获取用户提供的用于填充的数据。步骤108判断用户预先设置的填充方式是哪一种,如果用户设置的填充方式是从所要填充的文件块的0偏移处进行填充,则执行步骤109;如果用户设置的填充方式是从所要填充的文件块的指定偏移处进行填充,则执行步骤110;步骤109将数据写入的起始偏移量设置为所要填充的文件块在文件中的偏移量,然后执行步骤111;具体地,所要填充的文件块在文件中的偏移量可以由文件块记录中获得;例如,所要填充的文件块DataSection在文件中的偏移量为“0x32”,则将所述获取的数据从偏移量“0x32”处开始依次写到所要填充的文件块中;步骤110将数据写入的起始偏移量设置为所要填充的文件块在文件中的偏移量与指定偏移量的和;例如,所要填充的文件块DataSection在文件中的偏移量为“0x32”,而用户指定的偏移量为“0x03“,则数据写入的起始偏移量为“0x35”,即,将获取的数据从偏移量“0x35”处开始写入到所要填充的文件块中。步骤111计算获取的的数据可以分为多少页,并将获取的数据从写入的起始偏移量开始,将获取的数据按页写入到所要填充的文件块中;具体地,按4KB大小为分页单位,将获取的数据分为多个一页大小的数据块和一个不足一页大小的尾数据块,然后,按页分多次将获取的数据从写入的起始偏移量开始写入到所要填充的文件块中,不足一页大小的部分填充为0。举例说明如下参见表6,表6中的数据为用户提供的一个图片文件的具体内容,本实例具体说明如何将表6所示的数据封装成上述格式的数据文件,其中,表6中的数据大小为0x129c。表6<table>tableseeoriginaldocumentpage15</column></row><table>步骤201、申请内存,在内存中按照表二及表三所示的格式构造一个文件头及一个文件块表;步骤202、文件头中数据偏移起始地址为0x00,将其后2个字节长度的位置填充为“FT”,表示文件标识;步骤203、文件头中下一个数据偏移地址为0x02,将其后一个字节长度的位置填充为“0x01”,表示文件版本号;步骤204、文件头中下一个数据偏移地址为0x03,将其后一个字节长度的位置填充为“0x00”,表示保留项;步骤205、文件头中下一个数据偏移地址为0x04,将其后2个字节长度的位置填充为“JFIF”,表示文件类型;步骤206、文件头中下一个数据偏移地址为0x06,将其后2个字节长度的位置填充为“0x00”,表示文件头长度,这里采用的是缺省值;步骤207、文件头中下一个数据偏移地址为0x08,将其后8个字节长度的位置填充为“fc47dc8f75dlca01”,表示文件创建时间;具体地,计算机获取的文件创建时间为“2010.4.914:15:00“,将其转换为十六进制表示即为”fc47dc8f75dlca01”;步骤208、文件头中下一个数据偏移地址为0x10,将其后8个字节长度的位置填充为“3c2426f33ddlca01”,表示文件最后修改时间;具体地,计算机获取的文件最后修改时间为“2010.4.9172200”,将其转换为十六进制表示即为“3c2426f33ddlca01”;步骤209、文件头中下一个数据偏移地址为0x18,将其后8个字节长度的位置填充为0;经过上述步骤,填充后的文件头如下所示<table>tableseeoriginaldocumentpage16</column></row><table>步骤210、文件块表中数据起始偏移地址为“0x00”,将其后1个字节长度的位置填充为“0x03”,表示文件块类型;步骤212、文件块表中下一数据偏移地址为“0x01“,将其后1个字节长度的位置填充为"0x00“,表示Verify标记;步骤213、文件块表中下一个数据偏移地址为“0x02“,将其后1个字节长度的位置填充为0,表示Verify标记的文件块号;步骤214、文件块表中下一个数据偏移地址为“0x03“,将其后1个字节长度的位置填充为0,表示保留项;步骤215、文件块表中下一个数据偏移地址为“0x04“,将其后2个字节长度的位置填充为“0x1000“,表示文件块对齐大小,本实例中文件块以4KB大小对齐;步骤216、文件块表中下一个数据偏移地址为“0x06“,将其后2个字节长度的位置填充为0;步骤217、文件块表中下一个数据偏移地址为“0x0a“,将其后4个字节长度的位置填充为“0x129c“,表示文件块原始长度,即表6所示数据的真实长度;步骤218、文件块表中下一个数据偏移地址为“OxOe“,将其后4个字节长度的位置填充为“0x1000“,表示文件块对齐后大小;经过步骤210至217后,得到填充后的文件块表,如下<table>tableseeoriginaldocumentpage17</column></row><table>步骤219、补齐文件头中的文件块量、文件块表偏移量、CRC码字段;本实施例中用户只提供了如表6所示的一个文件块,所以文件头中文件块数量字段填充为“0x01“;文件头大小为”0x20“,则文件块表偏移量字段填充为”0x20“;CRC为文件块表与文件块的CRC校验和,为”0x7854AB3C“;则补齐后的文件头如下<table>tableseeoriginaldocumentpage17</column></row><table><table>tableseeoriginaldocumentpage18</column></row><table>步骤220、在磁盘文件的0偏移处写入填充后的文件头,在0x20偏移处写入填充后的文件块表,在0x32偏移处写入表6中的数据。需要说明的是,在将表6的数据写入到文件中时,将表6中的数据按4KB大小分页后,按页依次写入,不足4KB大小的部分用0补齐。本发明实施例提供的一种数据文件的生成方法,数据文件由文件头、文件块表、文件块三部分组成,各部分在文件中的位置、对齐方式等可根据实际需要随意进行分配,方式灵活多变,在付出较小的代价下随时根据市场需要对数据文件内容进行调整,此外,本发明数据文件能够兼容所有类型的数据文件且与平台无关。实施例2数据文件的文件头根据对数据文件解析的需要,除了包括文件标识、文件块表偏移量、文件块数量、循环冗余校验码CRC(CyclicRedundancyCheck)之外,还可以包括版本号、文件类型、文件头长度、文件创建时间、文件最后修改时间中的任意一个或多个;数据文件的文件块表根据对文件块解析的需要,除了包括文件块偏移量、文件块以多少字节对齐、文件块大小之外,还可以包括Verify标记、文件块类型、文件块对齐后的大小中的任意一个或多个。本实施例中以数据文件的文件头由文件标识、文件块表偏移量、文件块数量、CRC组成;文件块表由文件块偏移量、文件块以多少字节对齐、文件块大小组成为例来说明。参见图2,本发明实施例提供了一种数据文件弓丨擎,并通过将16进制和ASCII码表进行有效结合来解析数据文件。具体技术方案如下步骤301获取数据文件,获得该数据文件的文件头中的文件标识;具体地,可以由计算机中获取数据文件。具体地,数据文件由文件头、文件块表、文件块组成,其中,文件块表由文件块记录组成,文件块记录连续存储,文件块记录用于描述对应的文件块。获得该数据文件的文件头中的文件标识的方法具体为连续获取该数据文件中包括第1个字节在内的2个字节长度的数据,得到该数据文件的文件头中的文件标识。步骤302将步骤301中获得的文件标识与计算机中预置的文件标识相比较,如果一致,则执行步骤303;如果不一致,则操作结束。其中,计算机中会存储标识,该标识首先要经过ASCII码转换,得到16进制的ASCII码标识,再将步骤301中获得的文件标识与该16进制的ASCII码标识进行比较。步骤303获取该数据文件的文件头中的文件块数量、文件块表偏移量、CRC校验;其中,由步骤301中的文件标识的下一个字节开始连续跳过22个字节的数据后,获取从第23个字节开始的包括第23个字节在内的连续2个字节的数据,得到数据文件的文件头中的文件块数量;由文件块表大小的下一个字节开始连续获取包括文件块表大小的下一个字节在内的连续2个字节的数据,得到该数据文件的文件头中的文件块偏移量;从该文件块偏移量的下一个字节开始,获取包括该文件块偏移量的下一个字节在内的4个字节的数据,得到数据文件的文件头中的CRC。这里需要说明的是,数据文件的文件头中的版本号可以由文件标识之后的1个字节数据获取;数据文件的文件头中的保留项Reserve可以由版本号之后的一个字节数据获取;数据文件的文件头中的文件类型可以由Reserve之后的两个字节数据获取;数据文件的文件头中的文件头长度可以由文件类型之后的两个字节数据获取;文件创建时间可以由文件块头长度之后的8个字节数据获取;文件最后修改时间可以由文件创建时间之后的8个字节数据获取;其中,可以根据文件头长度快速定位文件块表和文件块。步骤304验证CRC是否正确,如果正确,执行步骤305,否则,操作结束;需要说明的是,CRC提供了一种最简单的校验方式,主要是为了快速的对文件头进行校验,必要时,可以选择用一个特定的校验区块来进行高级防篡改校验。例如,可以引入签名区块SignatureSection的概念,该签名区块可以对文件头和文件块表做防篡改校验,也可以对特定的文件块做解密校验等,如对文件块RockeyInfoSection进行解密。步骤305从步骤303中获取的文件块表偏移量开始,获取该数据文件中文件块的文件块偏移量;具体地,从文件块表偏移量开始,连续跳过6个字节数据后,获取从第7个字节开始的包括第7个字节在内的连续4个字节数据,得到文件块偏移量;步骤306获取该数据文件的文件块表中的文件块以多少字节对齐、文件块大小;具体地,从文件块表偏移量开始,连续跳过4个字节数据后,获取从第5个字节开始的包括第5个字节在内的连续2个字节数据,得到文件块以多少字节对齐;文件块大小可以由文件块偏移量之后的4个字节获取。需要说明的是,从文件块表偏移量开始,获取的第1个字节数据为文件块类型;Verify,VerifyFlags可以由文件块类型之后的2个字节数据获得;Reserve可以由Verify之后的1个字节数据获取;文件块对齐后的大小可以由文件块大小之后的4个字节数据获取。步骤307从步骤306中获取的文件块偏移量开始,连续获取与步骤306中获取的文件块大小相同大小的字节数据,并将获取的数据保存到缓冲区中。需要说明的是,如果获取的数据的大小小于与文件块大小,则按照步骤306中获取的文件块以多少字节对齐的对齐方式,将获取的数据中不足文件块大小的部分用零补齐。举例说明如下参见表7,表7中给出了由计算机截获的数据文件的实例,其中数据文件中数据的截取为横向依次截取。需要说明的是,表7中数据的存储模式采用的是大端存储模式。表7<table>tableseeoriginaldocumentpage20</column></row><table>根据表7中所示的数据文件,解析数据文件的方法可以参见图2,包括步骤401数据偏移起始地址为0x000000,获取其后2字节长度的数据,即16进制的4654作为数据文件的文件标识。通过ASCII码表可以得到这2个字节长度的数据对应的是“FT”;步骤402将计算机中预置的标识“FT”经过ASCII码转换,得到16进制的ASCII码标识4654;将步骤401中获得的16进制的标识与步骤402中转换得到的标识相比较,可知这两个标识是一致的,执行步骤403;步骤403数据文件中下一个数据偏移地址为0x000002,取其后1个字节长度的数据,16进制的01表示数据文件的版本号。步骤404数据文件中下一个数据偏移地址为0x000003,取其后1个字节长度的数据,得到16进制的00表示Reserve;步骤405:数据文件中下一个数据偏移地址为0x000004,取其后2个字节长度的数据,得到16进制的0100表示文件类型;步骤406数据文件中下一个数据偏移地址为0x000006,取其后2个字节长度的数据,得到16进制的0010表示文件块头长度;步骤407数据文件中下一个数据偏移地址为0x000008,取其后8个字节长度的数据,得到16进制的fc47dc8f75dlca01表示文件创建时间。步骤408数据文件中下一个数据偏移地址为0x0000010,取其后8个字节长度的数据,得到16进制的3c2426f33ddlca01表示文件最后修改时间;步骤409:数据文件中下一个数据偏移地址为0x000018,取其后2个字节长度的数据,得到16进制的0100,表示文件块数量;步骤410:数据文件中下一个数据偏移地址为0x00001a,取其后2个字节长度的数据,得到16进制的2000表示文件块表偏移起始位置;步骤411数据文件中的下一个数据偏移地址为0x00001c,取其后4个字节长度的数据,得到16进制的08fc32b8表示CRC;步骤412判断步骤411中获得CRC校验是否正确;接收到带有CRC校验码的文件头信息4654010001000010fc47dc8f75dlca013c2426f38ddlca010100200008fc32b8后,对双方预先设定好的生成码做二进制除法,除尽则说明文件头信息是正确的;本步骤中是能除尽的。步骤413由步骤410可知数据文件的文件块表的起始偏移地址为0x00000020,由该偏移地址开始取其后的一个字节长度的数据,即16进制的03表示文件块类型;步骤414:数据文件中的下一个数据偏移地址为0x00000021,取其后一个字节长度的数据,得到16进制的00,表示文件块Verify标记;步骤415数据文件中的下一个数据偏移地址为0x00000022,取其后一个字节长度的数据,得到16进制的00,表示文件块Verify标记的文件块号;步骤416数据文件中的下一个数据偏移地址为0x00000023,取其后一个字节长度的数据,得到16进制的00,表示保留项;步骤417数据文件中的下一个数据偏移地址为0x00000024,取其后2个字节长度的数据,得到16进制的0002,表示文件块以多少字节对齐;步骤418数据文件中的下一个数据偏移地址为0x00000026,取其后4个字节长度的数据,得到16进制的32000000,表示文件块偏移量;步骤419数据文件中的下一个数据偏移地址为0x0000002a,取其后4个字节长度的数据,得到16进制的62010000,表示文件块大小;步骤320数据文件中的下一个数据偏移地址为0X0000002e,取其后4个字节长度的数据,得到16进制的00020000,表示文件块对齐后的大小;步骤414:由步骤418可知数据文件中文件块的起始偏移地址为0x00000032,从该起始偏移地址开始向后读取数据,文件块的原始数据大小的十六进制表示为62010000;不足部分用零补齐,得到解析后的数据,如下46575305eed317007800055f00OOOfaOOOOOOca92c4302ffffffIf06OO00243124616624475a45654639394c374e676d36537238397964545530OO8604272696038506bfOO29OOOOOOOlOO7f9eb751Ieb914c880OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO85f5eOb63669e5c8daa9a9699b86026b10Obed49f7bd3005a366ba6009023d89c47d74672a743f15ec945e3f6685f5eOb63669e5c8daa9a9699b86026b10Obed49f7bd3005a366ba6009023d89c47d74672a743f15ec945e3f66OO9602OO08OOIc9605OO0706OOOOOO49129d02OO06008102OO08OO069602OO08OOIc9605OO07IdOOOOOO49129d020006OO8102OOIfOO069602OO08OOIc9605OO073dOOOOOO49129d02OO06OO8102OO3fOO069602OO08OOIc9605OO075dOOOOOO49129d02OO06OO8102OO60OO06OO910616OeOO47OOcdl999a333339bOf6658b9Ol40OOOOOO16OeOO47OOcd1999a333339bOf6658b9Ol40OOOOOOOOOOOOOOOOOOOOOOOOOOOO00,并将上述获取的数据保存到用户提供的缓存区中。其他数据文件的解析与上述实施例中类似,在此不做赘述。本发明实施例提供了一种解析数据文件的方法,通过对数据文件本身的分析,无须知道该数据文件的源代码就可以从数据文件中获得数据,不论数据文件的文件格式的种类,都可以使用本发明提供的解析方法来解析数据文件,提高文件解析的效率。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求一种数据文件引擎的实现方法,其特征在于,所述方法包括数据文件的生成及解析两个过程所述数据文件的生成过程为构造所述数据文件的文件头及文件块表;将文件标识、版本号、文件创建时间、文件最后修改时间填充到所述文件头中;将文件块类型、Verify标记、文件块对齐大小、文件块偏移量、文件块大小、文件块对齐后大小填充到所述文件块表中;将文件块数量、文件块表偏移量、CRC校验码填充到所述文件头中;根据所述文件块偏移量,将用户数据写入到所述数据文件的文件块中;所述数据文件的解析过程为获取数据文件,所述数据文件包括文件头、文件块表、文件块;对所述数据文件中的文件头进行解析,得到文件标识、文件块数量、文件块表偏移量、CRC校验码;根据所述解析得到的文件块表偏移量解析文件块表,得到文件块偏移量、文件块大小;根据所述解析得到的文件块偏移量及文件块大小解析文件块,得到所述文件块内容。2.根据权利要求1所述的方法,其特征在于,将文件标识、版本号、文件创建时间、文件最后修改时间填充到所述文件头中具体为在所述构造的文件头中的第一个字节位置上填充文件标识;在所述文件标识的下一个字节位置上填充版本号;从所述版本号的下一个字节位置开始连续跳过包含所述版本号的下一个字节位置在内的五个字节位置后,在所述文件标识之后的第六个字节位置开始的连续八个字节位置上填充文件创建时间;在所述文件创建时间的下一个字节位置开始的连续八个字节位置上填充文件最后修改时间。3.根据权利要求1所述的方法,其特征在于,将文件块类型、Verify标记、文件块对齐大小、文件块偏移量、文件块大小、文件块对齐后大小填充到所述文件块表中具体为在所述构造的文件块表中的第一个字节位置上填充文件块类型;在所述文件块类型的下一个字节位置上填充Verify标记;从所述Verify标记的下一个字节位置开始连续跳过包含所述Verify标记的下一个字节位置在内的两个字节位置后,在所述Verify标记之后的第三个字节位置开始的连续两个字节位置上填充文件块对齐大小;在所述文件块对齐大小的下一个字节位置开始的连续四个字节位置上填充文件块偏移量;在所述文件块偏移量的下一个字节位置开始的连续四个字节位置上填充文件块大小;在所述文件块大小的下一个字节位置开始的连续四个字节位置上填充文件块对齐后大小。4.根据权利要求1所述的方法,其特征在于,将文件块数量、文件块表偏移量、CRC校验码填充到所述文件头中具体为在所述文件创建时间的下一个字节位置开始的连续两个字节位置上填充文件块数量;在所述文件块数量的下一个字节位置开始的连续两个字节位置上填充文件块表偏移量;在所述文件块表偏移量的下一个字节位置开始的连续四个字节位置上填充CRC校验码。5.根据权利要求1所述的方法,其特征在于,根据所述文件块偏移量,将所述用户数据写入到所述数据文件的文件块中,之前还包括判断用户数据的大小是否大于所述文件块大小,如果大于,则返回错误;否则,根据所述文件块偏移量,将所述用户数据写入到所述文件块中。6.根据权利要求5所述的方法,其特征在于,根据所述文件块偏移量,将所述用户数据写入到所述文件块中具体为判断预先设置的填充方式是从零偏移量还是指定偏移量处将所述用户数据写入到所述文件块中,如果是零偏移量处,则从所述文件块偏移量开始,将所述用户数据写入到所述文件块中;如果是指定偏移量处,则计算所述文件块偏移量与所述指定偏移量的算术和,得到第一偏移量,并从所述第一偏移量开始,将所述用户数据写入到所述文件块中。7.根据权利要求6所述的方法,其特征在于,将所述用户数据写入到所述文件块中具体为将所述用户数据按4KB大小进行分页处理,然后,将所述用户数据按页写入到所述文件块中。8.根据权利要求1所述的方法,其特征在于,所述方法还包括将文件类型、文件头长度填充到所述文件头中。9.根据权利要求8所述的方法,其特征在于,将文件类型、文件头长度填充到所述文件头中具体为跳过所述版本号的下一个字节位置,在所述版本号之后的第二个字节位置开始的连续两个字节位置上填充文件类型;在所述文件类型的下一个字节位置开始的连续两个字节位置上填充文件头长度。10.根据权利要求1至9所述的方法,其特征在于,所述文件标识、版本号、文件块对齐大小是预先设定的;所述文件创建时间、文件最后修改时间、文件类型、文件块类型、Verify标记、文件块大小是由计算机获取的;所述文件块表偏移量是根据所述文件头长度来确定的,所述文件头长度是固定值;所述文件块偏移量是由所述文件头长度及文件块表长度来确定的,所述文件块表长度是固定值。11.根据权利要求1所述的方法,其特征在于,对所述数据文件中的文件头进行解析,得到文件标识、文件块数量、文件块表偏移量、CRC校验码具体为根据所述数据文件中的第一个字节连续获取包含所述第一个字节在内的两个字节长度的数据,得到所述数据文件的文件头中的文件标识;根据所述文件标识的下一个字节连续跳过包含所述文件标识的下一个字节在内的二十二个字节长度的数据后,获取从所述文件标识之后的第二十三个字节开始的连续两个字节的数据,得到所述数据文件的文件头中的文件块数量;根据所述文件块数量的下一个字节连续获取包含所述文件块数量的下一个字节在内的二个字节的数据,得到所述数据文件的文件头中的文件块表偏移量;根据所述文件块表偏移量的下一字节获取包含所述文件块表偏移量的下一字节在内的连续四个字节长度的数据,得到所述数据文件的文件头中的CRC校验。12.根据权利要求1所述的方法,其特征在于,根据所述解析得到的文件块表偏移量解析文件块表,得到文件块偏移量、文件块大小具体为从所述文件块表偏移量开始,连续跳过六个字节的数据后,获取从第七个字节开始的连续四个字节的数据,得到所述数据文件的文件块表中的文件块偏移量;根据所述文件块偏移量的下一个字节连续跳过包含所述文件块偏移量在内的四个字节的数据后,获取从第五个字节开始的连续四个字节的数据,得到所述数据文件的文件块表中的文件块大小。13.根据权利要求1所述的方法,其特征在于,根据所述解析得到的文件块偏移量及文件块大小解析文件块,得到所述文件块内容具体为从所述文件块偏移量开始,获取与所述文件块大小相同大小的字节数据,并将所述获取的字节数据存储在缓冲区中。14.根据权利要求1所述的方法,其特征在于,所述数据文件的解析过程还包括获取所述文件标识的下一个字节长度的数据,得到文件头中的版本号;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的两个字节的数据,获取包含从所述文件标识之后第三个字节开始的连续两个字节长度的数据,得到文件头中的文件类型;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的四个字节长度的数据后,连续获取两个字节长度的数据,得到文件头中的文件头长度;所述文件头长度用于快速定位文件头和文件块表;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的六个字节长度的数据后,连续获取八个字节长度的数据,得到文件头中的文件创建时间;和/或根据所述文件标识的下一个字节跳过包含所述文件标识的下一个字节在内的十四个字节长度的数据后,获取连续八个字节长度的数据,得到文件头中的文件最后修改时间。15.根据权利要求1所述的方法,其特征在于,所述方法还包括判断所述文件标识与计算机中预置的标识是否一致;当判断结果为一致时,继续获取所述数据文件的文件头中的版本号;当判断结果为不一致时,结束操作。16.根据权利要求15所述的方法,其特征在于,所述判断方法具体为将所述计算机中预置的标识经ASCII码转换,得到16进制的ASCII码标识;将所述文件标识与所述16进制的ASCII码标识相比较;如果相同,则判断结果为一致;如果不同,则判断结果为不一致。17.根据权利要求1所述的方法,其特征在于,所述方法还包括判断CRC校验是否正确,如果正确,继续获取数据文件的文件块表中的文件块偏移量的操作;如果不正确,结束操作。18.根据权利要求1所述的方法,其特征在于,所述数据文件的解析过程还包括从文件块表偏移量开始,获取一个字节长度的数据,得到所述数据文件的文件块表中的文件块类型;和/或从所述文件块表偏移量开始,跳过一个字节的数据之后,获取从第二个字节开始的一个字节的数据,得到所述数据文件的文件块表中的Verify标记;和/或从所述文件块表偏移量开始,跳过四个字节的数据之后,获取从第五个字节开始的连续两个字节的数据,得到所述数据文件的文件块表中的文件块对齐大小;和/或根据所述文件块大小的下一个字节连续获取包括所述文件块大小的下一个字节在内的四个字节长度的数据,得到所述数据文件的文件块表中的文件块对齐后大小。全文摘要本发明公开了一种数据文件引擎的实现方法,属于数据处理领域。所述方法包括数据文件生成过程构造数据文件的文件头及文件块表;将文件标识、版本号、文件创建时间、文件最后修改时间填充到文件头中;将文件块类型、Verify标记、文件块对齐大小、文件块偏移量、文件块大小、文件块对齐后大小填充到文件块表中;将文件块数量、文件块表偏移量、CRC校验码填充到文件头中;根据文件块偏移量,将用户数据写入到文件块中;数据文件解析过程获取数据文件;解析文件头,得到文件标识、文件块数量、文件块表偏移量、CRC校验码;根据文件块表偏移量解析文件块表,得到文件块偏移量、文件块大小;根据文件块偏移量及文件块大小解析文件块,得到文件块内容。文档编号G06F17/30GK101819602SQ20101017205公开日2010年9月1日申请日期2010年5月7日优先权日2010年5月7日发明者于华章,陆舟申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1