CN108108411A - 一种信息表文件的读取系统及方法 - Google Patents
一种信息表文件的读取系统及方法 Download PDFInfo
- Publication number
- CN108108411A CN108108411A CN201711316384.8A CN201711316384A CN108108411A CN 108108411 A CN108108411 A CN 108108411A CN 201711316384 A CN201711316384 A CN 201711316384A CN 108108411 A CN108108411 A CN 108108411A
- Authority
- CN
- China
- Prior art keywords
- information list
- list file
- file
- content
- information
- 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.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种信息表文件的读取系统及方法,所述系统包括:信息表文件转换模块和文件对象读取模块,其中,所述信息表文件转换模块,其以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换;所述文件对象读取模块,其采用流式解压算法,读取转换后的信息表文件;再基于解析指示,解析转换后的信息表文件的文件内容。本发明还提供一种信息表文件的读取方法,文件存储本身更小;读取时无解析消耗,使用的时候才有解析;不需要构建信息存储容器结构;CPU开销更小、更稳定,更节约内存,用户读取更快速且实时。
Description
技术领域
本发明涉及文件读取技术领域,特别是涉及一种信息表文件的读取系统及方法。
背景技术
现在越来越多的公司都会将Unity作为游戏开发的首选工具,而Unity游戏多是以C#语言开发、堆内存分配与回收机制运行的。Unity的读取信息表文件(例如游戏的配置文件)的方法有很多种,大多都是以Unity资源加载方式为主、工具类解析为辅的方式完成。
目前主流的方法是采用微软自带的XmlDocument、第三方的XmlParse、TbXml、Unity序列化等工具类去实现,此外还可以采用一些基于Sql数据库的文件表读取查询系统等去实现。但这些工具或者系统在运行效率、使用复杂度上均存在诸多不足:
首先,这些工具或者系统大多数都使用Unity文件读取,在资源加载时需要为文件分配内存。
其次,在使用XmlDocument、XmlParse或者TbXml等工具类时,存在许多问题,比如:遍历时存在大量CPU耗时;读取时存在大量、临时的解析内存分配消耗。读取时,需要先将文件数据对象先全部解析再存储到使用者定义的容器结构列表中来,假如一个文件是2M,解析的时候,甚至可以达到10M的临时内存的分配,存储的结构占用的内存可能需要4M。
此外,解析时,CPU的稳定也受到影响,容易产生瞬间峰值导致降帧。
综上所述,这类文件读取工具或者系统在读取过程中都存在着不同程度的性能开销或者使用问题。鉴于此,Unity自身提供了一种以序列化的方式读取文件的方案。此种Unity的方案是将解析的过程转移给Native层解析,虽然消耗降低了,但是无法解决文件配置信息被一次性全部解析到.net存储空间中的问题。并且,在.net中只要将文件内存数据转换为对象数据或者填充到使用自定义的结构列表中,就会产生消耗。也就是说,这个解析的过程或者构建过程本身就是一个性能消耗的问题。因此,目前文件系统中基本存在以下3类问题:
1)文件存储资源本身占据的内存;2)解析文件产生的临时内存;3)构建文件存储结构的开销。
发明内容
为了解决现有技术存在的不足,本发明的目的在于提供一种信息表文件的读取系统及方法,能够采用流式读(读取文件为流式解缩进行读取)、不全读(使用到的时候读取,不解析读不到的内容)、不构建(查找遍历直接在当前数据空间中操作)的方式,实现信息表文件的读取。
为实现上述目的,本发明提供的信息表文件的读取系统,包括:信息表文件转换模块和文件对象读取模块,其中,
所述信息表文件转换模块,用于以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换;
所述文件对象读取模块,采用流式解压算法,读取转换后的信息表文件;再基于解析指示,解析转换后的信息表文件的文件内容。
进一步地,所述表头信息包括:表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息和列分区映射信息。
进一步地,所述信息表文件转换模块,还用于对信息表文件进行预处理,所述预处理包括:
获取信息表文件的列数;
确定信息表文件中每列的数据类型;
选择信息表文件中的关键列进行排序;
设置信息表文件中每列的缺省值;
对信息表文件中列数值内容进行填充;
对信息表文件中重复的列数据进行合并。
进一步地,所述采用流式解压算法,读取转换后的信息表文件是,依据选择的列信息,使用流式解压算法,在指定位置处,从转换后的信息表文件中读取指定数量字节的文件内容到系统的公共映射区;
所述基于解析指示,解析转换后的信息表文件的文件内容是,从系统的公共映射区获取文件内容,根据解析指示,采用指定的读取方式进行解析;
其中,所述指定的读取方式包括:指定行列、遍历或者二分查找读取方式。
为实现上述目的,本发明提供的一种信息表文件的读取方法,包括以下步骤:
以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换;
采用流式解压算法,读取转换后的信息表文件,再基于解析指示,解析转换后的信息表文件的文件内容。
进一步地,所述表头信息包括:表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息和列分区映射信息。
进一步地,所述基于表头信息对分组聚合的内容进行转换的步骤包括:对信息表文件进行预处理的步骤,所述预处理包括:
获取信息表文件的列数;
确定信息表文件中每列的数据类型;
选择信息表文件中的关键列进行排序;
设置信息表文件中每列的缺省值;
对信息表文件中列数值内容进行填充;
对信息表文件中重复的列数据进行合并。
进一步地,所述采用流式解压算法,读取转换后的信息表文件,再基于解析指示,解析转换后的信息表文件的文件内容的步骤是,
依据选择的列信息,使用流式解压算法,在指定位置处,从转换后的信息表文件中读取指定数量字节的文件内容到系统的公共映射区;
从系统的公共映射区获取文件内容,根据解析指示,采用指定的读取方式进行解析;
其中,所述指定的读取方式包括:指定行列、遍历或者二分查找读取方式。
进一步地,采用指定行列的读取方式进行解析的步骤是,先读取解析指示中的指定行号、列号的内容,再计算指定行号、列号的内容的字符串的存储地址,再去字符串的存储地址所在空间处解析出对应的字符串的具体数值内容。
进一步地,采用二分查找的读取方式进行解析的步骤是,排序查找转换后的信息表文件的关键列中与解析指示中的指示内容相同行的行号,获取到与指示内容相对应的键值。
本发明的信息表文件的读取系统及方法,从问题的根源出发,站在使用者的角度,实现了以下的有益效果:
文件存储本身更小;读取时无解析消耗,使用的时候才有解析;不需要构建信息存储容器结构;CPU开销更小、更稳定,更节约内存,用户读取更快速且实时。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:
图1为根据本发明的信息表文件的读取系统架构图;
图2为根据本发明的信息表文件的读取方法流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
图1为根据本发明的信息表文件的读取系统架构图,如图1所示,本发明的信息表文件的读取系统100,包括:信息表文件转换模块110和文件对象读取模块120,其中,
信息表文件转换模块110,用于以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换。
其中,表头信息包括:表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息、列分区映射信息等。
进一步地,基于表头信息对分组聚合的内容进行转换,需要先对信息表文件进行预处理,用以获得与表头信息相对应的内容。
其中,预处理可以包括以下一项或者多项内容:
1)获取信息表文件的列数;
2)确定信息表文件中每列的数据类型;
3)选择信息表文件中的关键列进行排序;
4)设置信息表文件中每列的缺省值;
5)对信息表文件中列数值内容进行填充;
6)对信息表文件中重复的列数据进行合并。
其中,以列为单位对原信息表文件中的内容分组聚合的有益效果在于:由于在读取过程中,需要快速定位到行,又不可以解析出每行的内容。因此,需要采用列为组织单位,采用行则不可以。采用列为组织单位,在读取过程中,只要依赖每列的类型与总行数,计算出行所在偏移值,即可找到对应的列。
表1为根据本发明的一实施例中转换前的信息表文件
道具ID | 道具名称 | 品质 | 重量 | 描述 |
3 | 玄清剑 | 4 | 1.2 | 四大名剑之一。 |
1 | 玄灵剑 | 3 | 1.0 | 四大名剑之一。 |
4 | 玄空剑 | 5 | 1.5 | 四大名剑之一。 |
4 | 玄明剑 | 4 | 1.2 | 四大名剑之一。 |
表2为表1中的信息表文件转换后的信息表文件
如表1和表2所示,以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换。
文件对象读取模块120,采用流式解压算法,读取转换后的信息表文件;再基于解析指示,解析转换后的信息表文件的文件内容。
其中,采用流式解压算法,读取转换后的信息表文件时,依据选择的列信息,使用流式解压算法,在指定位置处,从转换后的信息表文件中读取指定数量字节的文件内容到系统的公共映射区;而基于解析指示,解析转换后的信息表文件的文件内容时,从系统的公共映射区获取文件内容,根据解析指示,采用指定行列、遍历或者二分查找等指定的读取方式进行解析。
图2为根据本发明的信息表文件的读取方法流程图,下面将参考图2,对本发明的信息表文件的读取方法进行详细描述。
在步骤210,以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换。
其中,表头信息包括:表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息、列分区映射信息等。
该步骤中,基于表头信息对分组聚合的内容进行转换,需要先对信息表文件进行预处理,用以获得与表头信息相对应的内容。
其中,预处理可以包括以下一项或者多项内容:
1)获取信息表文件的列数;
2)确定信息表文件中每列的数据类型;
3)选择信息表文件中的关键列进行排序;
4)设置信息表文件中每列的缺省值;
5)对信息表文件中列数值内容进行填充;
6)对信息表文件中重复的列数据进行合并。
其中,以列为单位对原信息表文件中的内容分组聚合的有益效果在于:由于在读取过程中,需要快速定位到行,又不可以解析出每行的内容。因此,需要采用列为组织单位,采用行则不可以。采用列为组织单位,在读取过程中,只要依赖每列的类型与总行数,计算出行所在偏移值,即可找到对应的列。
在步骤220,采用流式解压算法,读取转换后的信息表文件;再基于解析指示,解析转换后的信息表文件的文件内容。
该步骤中,先根据转换后的信息表文件的名称查找是否存在转换后的信息表文件,是则获取转换后的信息表文件的存储信息;然后依据转换后的信息表文件的打开参数与选择的列信息,使用流式解压算法,在指定位置处,从转换后的信息表文件中读取指定数量字节的文件内容到系统的公共映射区;再从系统的公共映射区获取文件内容,根据解析指示,采用指定行列、遍历或者二分查找等指定的读取方式进行解析。
其中,对文件内容进行解析之前,需要先解析转换后的信息表文件的表头信息(例如表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息、列分区映射信息),从而为快速读取文件内容的行列数值,提供必备的数据索引支持。
1)采用指定行列读取方式对文件内容进行解析时,先读取解析指示中的指定行号、列号的内容,再计算指定行号、列号的内容的字符串的存储地址,再去字符串的存储地址所在空间处解析出对应的字符串的具体数值内容。
例如,第n行、m列,以string为类型的字符串的存储地址计算过程为:数值存储地址=m所在列起始地址+n行数*每行占用的内存空间,如:sizeof(int)。字符串的类型为其他类型时,求解方法的原理相同。
2)采用遍历读取方式对文件内容进行解析时,只是需要在逻辑上按行数列数循环读取,而其中对于某一具体的行列的读取方式与指定行列读取方式相同。
3)采用二分查找读取方式对文件内容进行解析时,需要排序查找转换后的信息表文件的关键列中与解析指示中的指示内容相同行的行号,获取到与指示内容相对应的键值。在排序查找的过程中,需要用将指示内容不断地和关键列的各项数据进行比较,如果关键列出现多个相同的键值,则定位到相同值的第一个键值。
其中,进行数据比较的过程中,如果关键列是string类型则需要避免读取成string变量,并且在使用之前将查找内容转储为byte[]内容再与指示内容进行比较。
本发明的信息表文件的读取系统及方法,从问题的根源出发,以及站在使用者的角度,实现了以下的有益效果:
文件存储本身更小;读取时无解析消耗,使用的时候才有解析;不需要构建信息存储容器结构;CPU开销更小、更稳定,更节约内存,用户读取更快速且实时。
本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种信息表文件的读取系统,其特征在于,包括:信息表文件转换模块和文件对象读取模块,其中,
所述信息表文件转换模块,其以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换;
所述文件对象读取模块,其采用流式解压算法,读取转换后的信息表文件;再基于解析指示,解析转换后的信息表文件的文件内容。
2.根据权利要求1所述的信息表文件的读取系统,其特征在于,所述表头信息包括:表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息和列分区映射信息。
3.根据权利要求1所述的信息表文件的读取系统,其特征在于,所述信息表文件转换模块,其还用于对信息表文件进行预处理,所述预处理包括:
获取信息表文件的列数;
确定信息表文件中每列的数据类型;
选择信息表文件中的关键列进行排序;
设置信息表文件中每列的缺省值;
对信息表文件中列数值内容进行填充;
对信息表文件中重复的列数据进行合并。
4.根据权利要求1所述的信息表文件的读取系统,其特征在于,
所述文件对象读取模块,其依据选择的列信息,使用流式解压算法,在指定位置处,从转换后的信息表文件中读取指定数量字节的文件内容到系统的公共映射区;
从系统的公共映射区获取文件内容,根据解析指示,采用指定的读取方式进行解析;
其中,所述指定的读取方式包括:指定行列、遍历或者二分查找读取方式。
5.一种信息表文件的读取方法,其特征在于,包括以下步骤:
以列为单位对信息表文件中的内容分组聚合,并基于表头信息对分组聚合的内容进行转换;
采用流式解压算法,读取转换后的信息表文件,再基于解析指示,解析转换后的信息表文件的文件内容。
6.根据权利要求5所述的信息表文件的读取方法,其特征在于,所述表头信息包括:表头大小、信息表行数、信息表列数、关键列、各列名称、各列类型、列缺省值、各列数值区起始地址、列存储区信息和列分区映射信息。
7.根据权利要求5所述的信息表文件的读取方法,其特征在于,所述基于表头信息对分组聚合的内容进行转换的步骤包括:对信息表文件进行预处理的步骤,所述预处理包括:
获取信息表文件的列数;
确定信息表文件中每列的数据类型;
选择信息表文件中的关键列进行排序;
设置信息表文件中每列的缺省值;
对信息表文件中列数值内容进行填充;
对信息表文件中重复的列数据进行合并。
8.根据权利要求5所述的信息表文件的读取方法,其特征在于,所述采用流式解压算法,读取转换后的信息表文件,再基于解析指示,解析转换后的信息表文件的文件内容的步骤是,
依据选择的列信息,使用流式解压算法,在指定位置处,从转换后的信息表文件中读取指定数量字节的文件内容到系统的公共映射区;
从系统的公共映射区获取文件内容,根据解析指示,采用指定的读取方式进行解析;
其中,所述指定的读取方式包括:指定行列、遍历或者二分查找读取方式。
9.根据权利要求8所述的信息表文件的读取方法,其特征在于,采用指定行列的读取方式进行解析的步骤是,先读取解析指示中的指定行号、列号的内容,再计算指定行号、列号的内容的字符串的存储地址,再去字符串的存储地址所在空间处解析出对应的字符串的具体数值内容。
10.根据权利要求8所述的信息表文件的读取方法,其特征在于,采用二分查找的读取方式进行解析的步骤是,排序查找转换后的信息表文件的关键列中与解析指示中的指示内容相同行的行号,获取到与指示内容相对应的键值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711316384.8A CN108108411A (zh) | 2017-12-12 | 2017-12-12 | 一种信息表文件的读取系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711316384.8A CN108108411A (zh) | 2017-12-12 | 2017-12-12 | 一种信息表文件的读取系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108108411A true CN108108411A (zh) | 2018-06-01 |
Family
ID=62215563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711316384.8A Withdrawn CN108108411A (zh) | 2017-12-12 | 2017-12-12 | 一种信息表文件的读取系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108108411A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101231665A (zh) * | 2008-02-20 | 2008-07-30 | 中兴通讯股份有限公司 | 将数据库中数据导出成Excel文件的装置及其方法 |
US20110153650A1 (en) * | 2009-12-18 | 2011-06-23 | Electronics And Telecommunications Research Institute | Column-based data managing method and apparatus, and column-based data searching method |
CN105095247A (zh) * | 2014-05-05 | 2015-11-25 | 中国电信股份有限公司 | 符号数据分析方法和系统 |
CN106445727A (zh) * | 2015-08-07 | 2017-02-22 | 中国移动通信集团重庆有限公司 | 数据备份和恢复方法及系统 |
CN107045534A (zh) * | 2017-01-20 | 2017-08-15 | 中国航天系统科学与工程研究院 | 大数据环境下基于HBase的异构数据库在线交换与共享系统 |
-
2017
- 2017-12-12 CN CN201711316384.8A patent/CN108108411A/zh not_active Withdrawn
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101231665A (zh) * | 2008-02-20 | 2008-07-30 | 中兴通讯股份有限公司 | 将数据库中数据导出成Excel文件的装置及其方法 |
US20110153650A1 (en) * | 2009-12-18 | 2011-06-23 | Electronics And Telecommunications Research Institute | Column-based data managing method and apparatus, and column-based data searching method |
CN105095247A (zh) * | 2014-05-05 | 2015-11-25 | 中国电信股份有限公司 | 符号数据分析方法和系统 |
CN106445727A (zh) * | 2015-08-07 | 2017-02-22 | 中国移动通信集团重庆有限公司 | 数据备份和恢复方法及系统 |
CN107045534A (zh) * | 2017-01-20 | 2017-08-15 | 中国航天系统科学与工程研究院 | 大数据环境下基于HBase的异构数据库在线交换与共享系统 |
Non-Patent Citations (1)
Title |
---|
徐晓锦 等: "" 基于列存储机制下多维数据仓库模型的优化与研究"", 《计算机应用与软件》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104156415B (zh) | 解决医疗数据标准编码对照问题的映射处理系统及方法 | |
US8266151B2 (en) | Efficient XML tree indexing structure over XML content | |
CN1815477B (zh) | 用于提供基于标记语言的限定词的方法和系统 | |
US8037035B2 (en) | Apparatus for searching and managing compressed files | |
US20090024384A1 (en) | Data processing method and system, program for realizing the method, and computer readable storage medium storing the program | |
US20060239562A1 (en) | System and method for binary persistence format for a recognition result lattice | |
US10698953B2 (en) | Efficient XML tree indexing structure over XML content | |
US20080016108A1 (en) | Storing and loading data in an array-based computing environment | |
CN101146281A (zh) | 一种面向移动终端的创建图形用户界面模型 | |
CN104750727A (zh) | 一种列式内存存储查询装置及列式内存存储查询方法 | |
CN103336706B (zh) | 将伪代码转换为编程语言的系统和方法 | |
CN101145155A (zh) | 一种电子词典数据存储格式及其检索方法 | |
CN108766507A (zh) | 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法 | |
US20090077031A1 (en) | System and method for creating full-text indexes of patent documents | |
CN104021117A (zh) | 语言处理方法与电子设备 | |
CN101719162A (zh) | 基于片段模式匹配的多版本开放式地理信息服务访问方法及系统 | |
CN108108411A (zh) | 一种信息表文件的读取系统及方法 | |
CN103246649A (zh) | 一种数据库的动态建库方法 | |
CN105955680A (zh) | 一种支持动态附加扩展信息的单据打印方法 | |
CA2527436C (en) | Method of finding a search string in a document for viewing on a mobile communication device | |
US8578268B2 (en) | Rendering electronic documents having linked textboxes | |
De Carlos et al. | Model query translator: A model-level query approach for large-scale models | |
US8171006B1 (en) | Retrieval of searchable and non-searchable attributes | |
JP2018190017A (ja) | 技術マップ生成装置、技術マップ生成方法およびプログラム | |
CN101840426A (zh) | 一种基于坐标分离的gml文档存储与查询方法 |
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 | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20180601 |