CN107132993B - 一种将数据写入内存的方法及装置 - Google Patents
一种将数据写入内存的方法及装置 Download PDFInfo
- Publication number
- CN107132993B CN107132993B CN201610109642.4A CN201610109642A CN107132993B CN 107132993 B CN107132993 B CN 107132993B CN 201610109642 A CN201610109642 A CN 201610109642A CN 107132993 B CN107132993 B CN 107132993B
- Authority
- CN
- China
- Prior art keywords
- length data
- data
- indefinite
- file
- fixed
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种将数据写入内存的方法及装置,该方法包括:获取存储有定长数据和不定长数据的写入文件;其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储;按照字节对齐的方式,从所述写入文件中读取所有定长数据,并将读取的定长数据写入内存;根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。本发明减少了数据读取和写入操作的次数,耗时较短、效率较高。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种将数据写入内存的方法及装置。
背景技术
目前在很多的应用场景下,如地图数据库、学生信息库、病患信息库等,在这些信息库中包括多条源数据,每条源数据包含的数据项数量相同,有些数据项对应的字符串长度在所有的源数据中是固定的(则这种数据项称为定长数据),有些数据项对应的字符串长度在不同源数据中为可变的。每一条源数据包括多项信息(则这种数据项称为不定长数据)。以学生信息库为例:每一条源数据为一个学生的信息,一条源数据包括以下数据项:名字、学号、院系、班级、家庭住址、各科成绩;则在该源数据中学号、各科成绩均是数值其对应的数值的长度为固定的如一个字节,而班级、名字、院系、家庭住址这些数据项对于不同的学生是不同的,如有些学生的名字为2个汉字,有些学生的名字为3个,甚至还有些学生的名字为4个汉字,因此同样是名字这个数据项,但是在不同的源数据中其占的字节数是不同的,因此前述班级、名字、院系、家庭住址这些数据项为不定长数据。
现有技术中,在将源数据文件中的源数据加载到内存中,首先需要将源数据文件中的数据存储至写入文件中,再从写入文件中读取源数据写入至内存中。目前源数据文件的源数据存储格式与写入文件中的源数据存储结构一致。
目前将源数据文件中的源数据存储至写入文件中的过程为:每读取一条源数据则将该条源数据存储至写入文件中,在写入文件中存储该条源数据在写入文件中的偏移、源数据的总长度、源数据中不定长数据的长度、不定长数据以及源数据中的定长数据。
如下表1为源数据文件中源数据的存储格式:
表1
公交线路名称 | 长度 | 公交站点个数 |
地铁2号线 | 6000 | 20 |
11路 | 400 | 15 |
北京站-西站接驳车 | 5500 | 10 |
300路内环 | 2000 | 20 |
… | … | … |
按照前述方式将源数据文件中的源数据存储至写入文件后如表2所示:
表2
4字节 | 4字节 | 4字节 | 4字节 | 4字节 | 4字节 | 4字节 | 4字节 | 4字节 | 4字节 |
0 | 28 | 20 | 地 | 铁 | 2 | 号 | 线 | 6000 | 20 |
28 | 16 | 8 | 11 | 路 | 400 | 15 | 44 | 44 | 36 |
北 | 京 | 站 | - | 西 | 站 | 接 | 驳 | 车 | 5500 |
10 | 88 | 24 | 16 | 300 | 路 | 内 | 环 | … |
具体的,当接收到写入文件中的数据写入至内存的指令时,按照各条数据在写入文件中存储的顺序,依次读取每条数据并写入内存。具体的读取每条数据时,需要依次读取该条数据的偏移量、整条源数据的长度、该条源数据中不定长数据的长度、不定长数据以及定长数据,并将读取的该条数据的定长数据和不定长数据分别写入内存中,即,针对一条数据至少需要从写入文件中进行5次读取操作才能将一条数据写入内存中。
通过上述方式可以知道,现有技术将写入文件中的数据写入到内存中需要进行大量的读取、写入操作,耗时较长、效率较低。
发明内容
本发明提供一种将数据写入内存的方法及装置,用于解决现有技术中的将数据写入内存的方式导致的需要大量的读取和写入操作,耗时较长、效率较低的问题。
一种将数据写入内存的方法,包括:
获取存储有定长数据和不定数据的写入文件;其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储;
按照字节对齐的方式,从所述写入文件中读取所有定长数据,并将读取的定长数据写入内存;
根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
另一方面,本发明一种将数据写入内存的装置,包括:
获取模块,用于获取存储有定长数据和不定长数据的写入文件;其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储;
定长数据写入模块,用于按照字节对齐的方式,从所述写入文件中读取所有定长数据,并将读取的定长数据写入内存;
不定长数据写入模块,用于根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
利用本发明提供的将数据写入内存的方法及装置,具有以下有益效果:
写入文件中的所有定长数据连续存储,所有不定长数据连续存储,即将各源数据中的所有定长数据集中连续存储在写入文件,将各源数据中的所有不定长数据集中连续存储在写入文件,并且在定长数据中还包括了其对应的源数据的不定长数据的索引信息;因此,采用本申请技术方案,一方面,可以根据字节对齐的方式一次性从写入文件中读取所有源数据的定长数据并写入内存,即一次读取操作能够读取所有源数据的定长数据;另一方面,可以直接根据定长数据中不定长数据的索引信息读取不定长数据并写入内存,因此对于一条源数据对应的不定长数据通过一次读取操作即可完成不定长数据的读取;本申请技术方案减少了数据读取和写入操作,耗时较短、效率较高,克服了现有技术中针对一条源数据需要对其定长数据和不定长数据进行多次读操作和写操作而存在效率较低的问题。
附图说明
图1为本发明实施例提供的将数据写入内存的方法流程图;
图2为本发明实施例提供的将源数据存储到写入文件的方法流程图;
图3为本发明实施例提供的将不定长数据写入内存的方法流程图;
图4为本发明实施例提供的将数据写入内存的装置示意图之一;
图5为本发明实施例提供的将数据写入内存的装置示意图之二;
图6为本发明实施例提供的将数据写入内存的装置示意图之三;
图7为本发明实施例提供的将数据写入内存的装置示意图之四。
具体实施方式
下面结合附图和实施例对本发明提供的将数据写入内存的方法及装置进行更详细地说明。
本发明实施例提供一种将数据写入内存的方法,如图1所示,包括:
步骤101,获取存储待有定长数据和不定长数据的写入文件。
其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储。
具体的,接收获取存储有定长数据和不定长数据的写入文件的指令,该指令中携带该写入文件的标识,根据写入文件的标识获取该写入文件。该写入文件中的每条定长数据包括一条源数据中的定长数据,以及该条源数据中的不定长数据的索引信息,其中,所有源数据包含的各定长数据所占的字节数相同以及所有源数据包含的每个不定长数据对应的索引信息所占的字节数相同,即,可以将源数据中的定长数据和不定长数据的索引信息作为整体的一条定长数据存储在写入文件中。
写入文件中的所有不定长数据连续存储,以及写入文件中的所有定长数据连续存储,即,所有不定长数据与所有定长数据分别存储在写入文件中的两个区域,从而实现将定长数据和不定长数据分开存储。
写入文件中用于存储数据的最小存储单位可根据所占字节数最多的一个定长数据对应的字节数确定,比如,所占字节数最多的一个定长数据的长度为4字节,则规定每个其它定长数据所占的字节数也为4字节;也可以根据实际情况将最小存储单位设置为4字节之外的其它数值,这里不做限定。
假设写入文件中的最小存储单元为n字节(如n为4),则针对每个不定长数据,计算该不定长数据所占的存储单元数量可以根据以下方式得到:方式1,规定不定长数据中的每个字符所占的字节数为n字节(如n为4),则不定长数据所占的最小存储单元数量为不定长数据包含的字符数;方式2,计算该不定长数据包含的字符所占的总字节数,将该总字节数与n的商值向上取整得到的数值作为不定长数据所占的最小存储单元数量。
以不定长数据为“地铁2号线”,最小存储单元为4字节为例,采用方式1计算得到该不定长数据占20个字节,即占5个最小存储单元;采用方式2计算得到该不定长数据占总字节数为9,则将9除以4得到商值为2.25,将2.25向上取整得到3,则确定该不定长数据占3个最小存储单元,即该不定长数据占12个字节。
步骤102,按照字节对齐的方式,从所述写入文件读取所有定长数据,并将读取的定长数据写入内存。
具体的,假设一个整型数据从偶地址开始的地方存储在写入文件,即,按照字节对齐的方式存储在写入文件,一次就能从写入文件将该整型数据读取出来;假设一个整型数据从奇地址开始的地方存储在写入文件,即,未按照字节对齐的方式存储在写入文件,就需要两次才能从写入文件将该整型数据读取出来,这样会增加数据读取的次数。
目前,将数据存储到写入文件时,默认从偶地址开始存储,而本发明实施例利用默认从偶地址开始将数据存储到写入文件的特性,以及定长数据所占的字节数固定的特性,可以从写入文件中存储定长数据的起始位置(偶地址)开始,所有定长数据所占的字节总数,按照字节对齐的方式一次性从写入文件读取所有的定长数据。
由于规定每个定长数据在内存中所占的字节数相同,因此可按照字节对齐的方式一次性从写入文件中将所有定长数据读取出来,并读取出来的定长数据写入内存。
步骤103,根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
具体的,本发明实施例中,源数据在内存中的存储格式与源数据在写入文件中存储的格式相同。由于写入文件中的定长数据包括不定长数据的索引信息,每条不定长数据的索引信息包括该条不定长数据在写入文件中的偏移以及该条不定长数据所占的字节总数,因此可根据各条不定长数据在写入文件中的偏移以及所占的字节总数,从写入文件读取对应的不定长数据,并将各条不定长数据在写入文件中的偏移作为对应不定长数据在内存中的偏移(相对于内存中用于保存不定长数据的起始位置的偏移),从而将从写入文件读取的不定长数据写入内存的相应的位置。
具体的,本发明实施例的定长数据和不定长数据以二进制字符串的形式存储在写入文件,将写入文件中的定长数据和不定长数据以二进制字符串的形式写入内存。
本发明实施例,写入文件中的所有定长数据连续存储,所有不定长数据连续存储,即将源数据中的所有定长数据和所有不定长数据分开存储到写入文件,而不是现有技术中将定长数据和不定长数据混合存储在写入文件,从而在将数据写入内存时,可以根据字节对齐的方式一次性读取所有的定长数据写入内存,并且可以根据定长数据中不定长数据的索引信息,将不定长数据写入内存,从而减少了数据的读取和写入操作的次数,耗时较短、效率较高。尤其是在需要写入内存的数据较多时,本发明实施例的效果更加明显。
具体的,本发明实施例中写入文件中的定长数据和不定长数据对应的源数据预先存储在源数据文件中,为便于读取源数据,本申请需要预先将源数据文件中存储的源数据存储到写入文件中,读取写入文件中的定长数据和不定长数据,并将读取的数据写入内存。优选地,获取存储有定长数据和不定长数据的写入文件之前,还包括:
根据源数据文件中的源数据生成定长数据和不定长数据,并将生成的定长数据和不定长数据存储至所述写入文件中。
作为一种优选实施方式,根据源数据文件中的源数据生成定长数据和不定长数据,并将生成的定长数据和不定长数据存储至所述写入文件中,如图2所示,具体包括:
针对源数据文件中的源数据,按照每条源数据在源数据文件中存储的先后顺序,分别执行以下步骤:
步骤201,提取该条源数据中的不定长数据和定长数据。
具体的,每条源数据对应的数据项相同,比如表1(每行表示一条源数据)所示的源数据文件中每条源数据对应3个数据项,并且,每条源数据的对应数据项中的内容所表示的含义相同,比如,表1中的第一条源数据中的地铁2号线和第二条源数据中的11路均表示公交线路名称。预先设置每条源数据中的数据项为定长数据或不定长数据,比如,预先根据源数据文件中的定长数据和不定长数据,为每个定长数据添加定长标识,为每个不定长数据添加不定长标识,从而在提取一条源数据中的不定长数据和定长数据直接根据定长标识和不定长标识即可从源数据中快速准确的确定出定长数据和不定长数据。比如,将表1中的第一条源数据中的第一个数据项的标识设置为1,第二个数据项的标识设置为2,第三个数据项的标识设置为3,其中,1为不定长数据,2和3为定长数据,或者,将表1中的第一条源数据中的第一个数据项的标识设置为0,第二个数据项的标识和第三个数据项的标识1,其中,0为不定长标识,1为定长标识。
步骤202,将该条源数据中的不定长数据确定为写入文件中的一条不定长数据,并将该条不定长数据存储到所述写入文件的第一区域。
具体的,写入文件中的第一区域用于存储源数据中的不定长数据,即所有源数据包含的所有不定长数据集中存储到第一区域。
步骤203,生成该条源数据中的不定长数据的索引信息,其中,所述索引信息包括该条源数据中不定长数据在第一区域的偏移以及该条源数据中的不定长数据所占的字节总数。每条不定长数据在第一区域的偏移为开始存储该不定长数据的存储块的位置相对于第一区域的起始位置的偏移量。
具体的,将该条源数据中不定长数据在第一区域的偏移作为一条定长数据中的一个定长数据,将该条源数据中的不定长数据所占的字节总数作为该条定长数据中的另一个定长数据。
步骤204,将该条源数据中的定长数据以及该条源数据中的不定长数据的索引信息生成为写入文件的一条定长数据,并将该条定长数据存储到所述写入文件的第二区域。
具体的,写入文件中的第二区域用于集中存储所有源数据中的定长数据以及源数据中不定长数据的索引信息。第一区域与第二区域对应的存储空间可以相邻也可以不相邻。优选地,针对写入文件中的每条定长数据,该条定长数据中的索引信息位于该条定长数据中源数据的定长数据之前,也可位于该条定长数据中源数据的定长数据之后,这里不做限定。
本发明实施例中,预先根据源数据中包括定长数据和不定长数据的特点,针对每条源数据,提取该条源数据中的不定长数据和定长数据,比如,源数据文件中存储的源数据为公交线路数据,如一条源数据对应一条公交线路的属性信息,属性信息可包括公交线路名称、长度、站点数、各站点名称、发车间隔等信息,公交线路的属性信息中长度、站点数、发车间隔均是数值为定长数据,而属性信息中公交线路名称、各站点名称均为不定长数据。则将该条源数据中的公交线路名称和各站点名称作为一条不定长数据存储至写入文件中的第一区域,并生成该条不定长数据索引信息,该索引信息包括该不定长数据在第一区域中的偏移以及占的字节数;将该条源数据中的长度、站点数、发车间隔以及前述索引信息作为一条定长数据存储至写入文件的第二区域中。
优选地,若每条不定长数据包括多种类型的子不定长数据时,则步骤202中,所述将该条不定长数据存储到所述写入文件的第一区域,具体包括:
针对该条不定长数据包含的每种类型的子不定长数据,将该种类型的子不定长数据存储到所述写入文件的第一区域中的与该种类型的不定长数据对应的子区域中。
具体的,每条源数据中的不定长数据可能包括多种类型的子不定长数据,则,该条源数据对应一条不定长数据,该不定长数据又包括多种类型的子不定长数据,针对每种类型的子不定长数据,将该种类型的子不定长数据存储到第一区域中与该种类型的子不定长数据对应的子区域中,第一区域预先划分为多个子区域,每种类型的子不定长数据与子区域一一对应。继续沿用上例,源数据文件中存储的源数据为公交线路数据,源数据对应的一条不定长数据包括公交线路名称和各站点名称,则该条不定长数据包括两种类型的子不定长数据即公交线路名称和站点名称;则可以在第一区域中划分两个子区域,一个子区域用于存储所有源数据的公交线路名称,另一个子区域用于存储所有源数据的各公交站点名称,例如按照各源数据在源数据文件中存储顺序依次将各源数据的公交线路名称存储至相应的子区域中;按照各源数据在源数据文件中存储顺序依次将各源数据的各公交站点名称存储至相应的子区域中。
优选地,步骤103,根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存,如图3所示,具体包括:
步骤301,提取写入文件中的每条定长数据中的索引信息;
步骤302,根据每个索引信息对应的不定长数据在第一区域的偏移以及不定长数据所占的字节总数,从所述写入文件的第一区域读取所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
具体的,预先规定内存中的第一区域用于存储不定长数据,内存中的第二区域用于存储定长数据,本发明实施例,将不定长数据在写入文件的第一区域中的偏移作为该不定长数据在内存的第一区域中的偏移,从而根据不定长数据在第一区域的偏移以及不定长数据所占的字节总数将不定长数据写入内存的相应位置。
优选地,本发明实施例中写入文件中的不定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储;以及,写入文件中的定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储。
具体的,源数据按照特定的顺序存储在源数据文件中,将源数据按照存储到写入文件后,不定长数据和定长数据分别按照其对应的源数据在元数据文件中的先后顺序依次存储在写入文件中。
下面通过具体实施例举例说明本发明实施例提供的将数据写入内存的方法的具体实施过程。
实施例一
假设源数据包括公交线路名称、公交站点个数以及公交线路长度(即表1中的长度),源数据对应的源数据文件如表1所示,表1中公交线路名称为不定长数据,长度和公交站点个数均为定长数据,每行源数据看做一条源数据。利用本发明实施例提供的将数据写入内存的方法,将表1中的源数据存储到写入文件后得到的写入文件如表3所示,表3的存储格式只是其中一种存储格式,还可以为其它存储格式。
表3
表3中,写入文件中用于存储定长数据的最小存储单元为4个字节,本实施例,规定不定长数据中的两个汉字之间,或者,任一汉字之前或之后的数字所占的字节数为4字节,比如,不定长数据中的“11路”,规定“11”这个数字占4个字节,这样可以节省存储空间。也可按照上述实施例中提及的不定长数据中的每个字符占4个字节,即,“11”这个数字包括两个字符,每个字符占4字节,这里不做限定。
从第一个最小存储单元开始,每4个最小存储单元(即每16个字节)存储的待写入数据对应一条定长数据,该4个最小存储单元中,第一个最小存储单元存储公交线路名称在写入文件中的偏移(即表3中不定长数据偏移),第二个最小存储单元存储该公交线路名称所占的字节总数(即表3中不定长数据占字节数),第三个最小存储单元存储该公交线路的长度(即表3中的长度),第四个最小存储单元存储公交线路的公交站点个数。其中,公交线路名称的在写入文件中的偏移即不定长数据在写入文件中的的偏移,该偏移可以为相对于写入文件的起始位置的偏移,也可以为相对与开始存储或写入不定长数据的起始位置的偏移,本发明实施例中公交线路名称的偏移为相对与开始存储或写入不定长数据的起始位置的偏移,表3中开始存储或写入不定长数据的起始位置为第68个字节(即第一区域的起始位置)。表3中,各条定长数据按照其对应的源数据在源数据文件中先后顺序连续存储在写入文件的前半部分(第二区域),各条不定长数据按照其对应的源数据在源数据文件中先后顺序连续存储在写入文件的后半部分(第一区域),并且,所有定长数据存储在所有不定长数据之前。
由表3所示的写入文件可知,假设写入文件包括4条定长数据和4条不定长数据,则在写入文件的存储空间中前16个最小存储单元(即第二区域)用于存储4条定长数据,后20个最小存储单元(即第一区域)用于存储4条不定长数据。
获取表3对应的写入文件,按照字节对齐的方式,从表3格式的写入文件中的前16个最小存储单元一次性读取4条定长数据,并将读取的定长数据写入内存;根据表3格式的写入文件的每条定长数据中的索引信息,从表3格式的写入文件中的第一区域中的第0个字节开始读取20个字节(即5个最小存储单元)得到第一条不定长数据、第20字节开始读取8个字节(即2个最小存储单元)得到第二条不定长数据、第28字节开始读取36个字节(即9个最小存储单元)得到第三条不定长数据和第64字节开始读取16个字节(即4个最小存储单元)得到第四条不定长数据,并将读取的4条不定长数据写入内存。
其中,一条定长数据所占的字节总数为16个字节,因此,按照16字节对齐的方式,从写入文件一次性读取所有定长数据,并将读取的定长数据写入内存。
实施例二
假设源数据包括公交线路名称、公交站点个数、公交线路长度以及站点名称,源数据对应的源数据文件如表4所示,表4中公交线路名称以及站点名称均为不定长数据,公交路线长度和公交站点个数均为定长数据,每行源数据看做一条源数据。表4中的不定长数据包括两种类型的子不定长数据,即,包括公交线路名称以及站点名称两种类型的子不定长数据。利用本发明实施例提供的将包括多种类型的子不定长数据的源数据写入内存的方法,将表4中的源数据存储到写入文件后得到的写入文件如表5所示,表4中的数据仅仅是一种举例,并不代表实际内容。
表4
公交线路名称 | 长度 | 公交站点个数 | 站点名称 |
地铁2号线 | 6000 | 1 | 建国门 |
11路 | 400 | 1 | 西单 |
北京站-西站接驳车 | 5500 | 2 | 北京站-西站 |
表5
表5中,写入文件中用于存储定长数据的最小存储单元为4个字节,从第一个最小存储单元开始,每6个最小存储单元(即每16个字节)存储的待写入数据对应一条定长数据,该6个最小存储单元中,第一个最小存储单元存储公交线路名称在写入文件中的偏移,第二个最小存储单元存储该公交线路名称的所占的字节总数,第三个最小存储单元存储站点名称在写入文件中的偏移,第四个最小存储单元存储站点名称所占的字节数,第五个最小存储单元存储该公交线路的长度(即表5中的长度),第六个最小存储单元存储公交线路的公交站点个数。其中,将用于存储不定长数据的第一区域划分为两个子区域,公交线路名称类型的子不定长数据存储在其中一个子区域(比如第一子区域),站点名称类型的子不定长数据存储在另一子区域(比如第二子区域),公交线路名称在写入文件中的偏移即在公交线路名称类型的子不定长数据对应的子区域中的偏移,站点名称在写入文件中的偏移即在站点名称类型的子不定长数据对应的子区域中的偏移。
表5中开始存储公交线路名称类型的子不定长数据的起始位置为第72个字节;开始存储站点名称类型的子不定长数据的起始位置为第144个字节。
获取表5对应的写入文件,按照字节对齐的方式,从表5格式的写入文件中的前18个最小存储单元一次性读取3条定长数据,并将读取的定长数据写入内存;根据表5格式的写入文件的每条定长数据中的索引信息,从表5格式的写入文件中的第一子区域中的第0字节开始读取20个字节,再从第二子区域中的第0字节开始读取12个字节,得到第一条不定长数据;从第一子区域的第20字节开始读取8个字节,再从第二子区域的第12字节开始读取8个字节,得到第二条不定长数据;从第一子区域的28字节开始读取36个字节,再从第二子区域的第20字节开始读取24个字节,得到第三条不定长数据,并将读取的3条不定长数据写入内存。
基于与本发明实施例提供的将数据写入内存的方法同样的发明构思,本发明实施例还提供一种将数据写入内存的装置,如图4所示,包括:
获取模块401,用于获取存储有定长数据和不定长数据的写入文件;其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储;
定长数据写入模块402,用于按照字节对齐的方式,从所述写入文件中读取所有定长数据,并将读取的定长数据写入内存;
不定长数据写入模块403,用于根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
优选地,如图5所示,所述装置,还包括:
数据生成模块404,用于在获取存储有定长数据和不定长数据的写入文件之前,根据源数据文件中的源数据生成定长数据和不定长数据,并将生成的定长数据和不定长数据存储至所述写入文件中。
优选地,如图6所示,所述装置中,所述数据生成模块404具体包括:
提取单元405,用于针对源数据文件中的源数据,按照每条源数据在源数据文件中存储的先后顺序,提取该条源数据中的不定长数据和定长数据;
不定长数据存储单元406,用于将该条源数据中的不定长数据确定为写入文件中的一条不定长数据,并将该条不定长数据存储到所述写入文件的第一区域;
索引信息生成单元407,用于生成该条源数据中的不定长数据的索引信息,其中,所述索引信息包括该条源数据中不定长数据在所述第一区域的偏移以及该条源数据中的不定长数据所占的字节总数;
定长数据存储单元408,用于将该条源数据中的定长数据以及该条源数据中的不定长数据的索引信息生成为所述写入文件中的一条定长数据,并将该条定长数据存储到所述写入文件的第二区域。
优选地,若每条不定长数据包括多种类型的子不定长数据时,所述不定长数据存储单元在将该条不定长数据存储到所述写入文件的第一区域时,具体用于:
针对该条不定长数据包含的每种类型的子不定长数据,将该种类型的子不定长数据存储到所述写入文件的第一区域中的与该种类型的不定长数据对应的子区域中。
优选地,如图7所示,所述装置中,不定长数据写入模块403,具体包括:
索引信息提取单元409,用于提取写入文件中的每条定长数据中的索引信息;
不定长数据写入单元410,用于根据每个索引信息对应的不定长数据在第一区域的偏移以及不定长数据所占的字节总数,从所述写入文件的第一区域中读取所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
优选地,所述写入文件中的不定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储;以及,所述写入文件中的定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储。
利用本发明实施例提供的将数据写入内存的方法及装置,具有以下有益效果:写入文件中的所有定长数据连续存储,所有不定长数据连续存储,即将各源数据中的所有定长数据集中连续存储在写入文件,将各源数据中的所有不定长数据集中连续存储在写入文件,并且在定长数据中还包括了其对应的源数据的不定长数据的索引信息;因此,采用本申请技术方案,一方面,可以根据字节对齐的方式一次性从写入文件中读取所有源数据的定长数据并写入内存,即一次读取操作能够读取所有源数据的定长数据;另一方面,可以直接根据定长数据中不定长数据的索引信息读取不定长数据并写入内存,因此对于一条源数据对应的不定长数据通过一次读取操作即可完成不定长数据的读取;本申请技术方案减少了数据读取和写入操作,耗时较短、效率较高,克服了现有技术中针对一条源数据需要对其定长数据和不定长数据进行多次读操作和写操作而存在效率较低的问题。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (12)
1.一种将数据写入内存的方法,其特征在于,包括:
获取存储有定长数据和不定长数据的写入文件;其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储;字节数固定的数据项作为源数据的定长数据、字节数可变的数据项作为源数据的不定长数据;
按照字节对齐的方式,从所述写入文件中读取所有定长数据,并将读取的定长数据写入内存;
根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
2.如权利要求1所述的方法,其特征在于,获取存储有定长数据和不定长数据的写入文件之前,所述方法还包括:
根据源数据文件中的源数据生成定长数据和不定长数据,并将生成的定长数据和不定长数据存储至所述写入文件中。
3.如权利要求2所述的方法,其特征在于,根据源数据文件中的源数据生成定长数据和不定长数据,并将生成的定长数据和不定长数据存储至所述写入文件中,具体包括:
针对源数据文件中的源数据,按照每条源数据在源数据文件中存储的先后顺序,分别执行以下步骤:
提取该条源数据中的不定长数据和定长数据;
将该条源数据中的不定长数据确定为写入文件中的一条不定长数据,并将该条不定长数据存储到所述写入文件的第一区域;
生成该条源数据中的不定长数据的索引信息,其中,所述索引信息包括该条源数据中不定长数据在所述第一区域的偏移以及该条源数据中的不定长数据所占的字节总数;
将该条源数据中的定长数据以及该条源数据中的不定长数据的索引信息生成为所述写入文件中的一条定长数据,并将该条定长数据存储到所述写入文件的第二区域。
4.如权利要求3所述的方法,其特征在于,若每条不定长数据包括多种类型的子不定长数据时,所述将该条不定长数据存储到所述写入文件的第一区域,具体包括:
针对该条不定长数据包含的每种类型的子不定长数据,将该种类型的子不定长数据存储到所述写入文件的第一区域中的与该种类型的不定长数据对应的子区域中。
5.如权利要求3或4所述的方法,其特征在于,根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存,具体包括:
提取写入文件中的每条定长数据中的索引信息;
根据每个索引信息对应的不定长数据在第一区域的偏移以及不定长数据所占的字节总数,从所述写入文件的第一区域中读取所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
6.如权利要求1所述的方法,其特征在于,所述写入文件中的不定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储;以及,所述写入文件中的定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储。
7.一种将数据写入内存的装置,其特征在于,包括:
获取模块,用于获取存储有定长数据和不定长数据的写入文件;其中,写入文件中的每条定长数据包括一条源数据的定长数据以及该条源数据的不定长数据的索引信息,写入文件中的每条不定长数据包括一条源数据的不定长数据;写入文件中的所有不定长数据连续存储以及所有定长数据连续存储;字节数固定的数据项作为源数据的定长数据、字节数可变的数据项作为源数据的不定长数据;
定长数据写入模块,用于按照字节对齐的方式,从所述写入文件中读取所有定长数据,并将读取的定长数据写入内存;
不定长数据写入模块,用于根据写入文件中定长数据包含的索引信息,从所述写入文件中读取与所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
8.如权利要求7所述的装置,其特征在于,还包括:
数据生成模块,用于在获取存储有定长数据和不定长数据的写入文件之前,根据源数据文件中的源数据生成定长数据和不定长数据,并将生成的定长数据和不定长数据存储至所述写入文件中。
9.如权利要求8所述的装置,其特征在于,所述数据生成模块具体包括:
提取单元,用于针对源数据文件中的源数据,按照每条源数据在源数据文件中存储的先后顺序,提取该条源数据中的不定长数据和定长数据;
不定长数据存储单元,用于将该条源数据中的不定长数据确定为写入文件中的一条不定长数据,并将该条不定长数据存储到所述写入文件的第一区域;
索引信息生成单元,用于生成该条源数据中的不定长数据的索引信息,其中,所述索引信息包括该条源数据中不定长数据在所述第一区域的偏移以及该条源数据中的不定长数据所占的字节总数;
定长数据存储单元,用于将该条源数据中的定长数据以及该条源数据中的不定长数据的索引信息生成为所述写入文件中的一条定长数据,并将该条定长数据存储到所述写入文件的第二区域。
10.如权利要求9所述的装置,其特征在于,若每条不定长数据包括多种类型的子不定长数据时,所述不定长数据存储单元在将该条不定长数据存储到所述写入文件的第一区域时,具体用于:
针对该条不定长数据包含的每种类型的子不定长数据,将该种类型的子不定长数据存储到所述写入文件的第一区域中的与该种类型的不定长数据对应的子区域中。
11.如权利要求9或10所述的装置,其特征在于,不定长数据写入模块,具体包括:
索引信息提取单元,用于提取写入文件中的每条定长数据中的索引信息;
不定长数据写入单元,用于根据每个索引信息对应的不定长数据在第一区域的偏移以及不定长数据所占的字节总数,从所述写入文件的第一区域中读取所述索引信息对应的不定长数据,并将读取的不定长数据写入内存。
12.如权利要求7所述的装置,其特征在于,所述写入文件中的不定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储;以及,所述写入文件中的定长数据按照其对应的源数据在源数据文件中的先后顺序依次连续存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610109642.4A CN107132993B (zh) | 2016-02-26 | 2016-02-26 | 一种将数据写入内存的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610109642.4A CN107132993B (zh) | 2016-02-26 | 2016-02-26 | 一种将数据写入内存的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107132993A CN107132993A (zh) | 2017-09-05 |
CN107132993B true CN107132993B (zh) | 2021-02-02 |
Family
ID=59721103
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610109642.4A Active CN107132993B (zh) | 2016-02-26 | 2016-02-26 | 一种将数据写入内存的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107132993B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108319429B (zh) * | 2018-01-10 | 2021-02-19 | 北京思特奇信息技术股份有限公司 | 一种加快文件读取的方法及计算机设备 |
CN109671012A (zh) * | 2018-12-11 | 2019-04-23 | 北京像素软件科技股份有限公司 | 图形引擎中的数据处理方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000322416A (ja) * | 1999-05-06 | 2000-11-24 | Ntt Data Corp | 文書検索装置 |
CN1294387A (zh) * | 1999-08-20 | 2001-05-09 | 微软公司 | 对顺序存取存储介质上变长度数据的有效存取 |
CN101582091A (zh) * | 2009-06-10 | 2009-11-18 | 凌阳科技股份有限公司 | 一种词库创建方法和系统,及相应的单词查询方法和系统 |
WO2015027902A1 (en) * | 2013-08-26 | 2015-03-05 | Tencent Technology (Shenzhen) Company Limited | Method, computing device, and computer program product for storing file index |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1936864B (zh) * | 2005-09-22 | 2010-09-08 | 康佳集团股份有限公司 | 不定长记录的数据组织方法 |
US8612491B2 (en) * | 2011-10-25 | 2013-12-17 | The United States Of America, As Represented By The Secretary Of The Navy | System and method for storing a dataset of image tiles |
CN103294602B (zh) * | 2012-02-28 | 2016-04-13 | 孕龙科技股份有限公司 | 逻辑分析仪的数据读取及写入其存储器的方法 |
CN103150397B (zh) * | 2013-03-26 | 2016-03-16 | 北京经纬恒润科技有限公司 | 一种数据索引创建方法、数据检索方法和系统 |
CN103744855B (zh) * | 2013-11-29 | 2017-07-28 | 航天恒星科技有限公司 | 一种基于聚合文件的瓦片地图存储方法 |
-
2016
- 2016-02-26 CN CN201610109642.4A patent/CN107132993B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000322416A (ja) * | 1999-05-06 | 2000-11-24 | Ntt Data Corp | 文書検索装置 |
CN1294387A (zh) * | 1999-08-20 | 2001-05-09 | 微软公司 | 对顺序存取存储介质上变长度数据的有效存取 |
CN101582091A (zh) * | 2009-06-10 | 2009-11-18 | 凌阳科技股份有限公司 | 一种词库创建方法和系统,及相应的单词查询方法和系统 |
WO2015027902A1 (en) * | 2013-08-26 | 2015-03-05 | Tencent Technology (Shenzhen) Company Limited | Method, computing device, and computer program product for storing file index |
Non-Patent Citations (1)
Title |
---|
连续数据保护中的滑动窗口技术的优化;万莹等;《计算机与现代化》;20121220;期刊189-192页,本文1-3页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107132993A (zh) | 2017-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ehrl | Minimum comparable areas for the period 1872-2010: an aggregation of Brazilian municipalities♦ | |
CN113609820B (zh) | 基于可扩展标记语言文件生成word文件的方法、装置及设备 | |
CN107992625A (zh) | 一种网页表格数据自动抽取方法及装置 | |
EP2291010A1 (en) | Structure processing method and apparatus for layout file | |
CN103699585A (zh) | 文件的元数据存储以及文件恢复的方法、装置和系统 | |
CN103167172A (zh) | 将多种聊天记录整合的方法和系统 | |
CN109815452B (zh) | 文本比较方法、装置、存储介质及电子设备 | |
US20130227407A1 (en) | Method and device for displaying an electronic document | |
CN109885614B (zh) | 一种数据同步的方法和装置 | |
CN108268884B (zh) | 一种文档对比方法及装置 | |
CN107132993B (zh) | 一种将数据写入内存的方法及装置 | |
CN111930976B (zh) | 演示文稿生成方法、装置、设备及存储介质 | |
CN107092655A (zh) | 用于Android宽屏设备中组图的循环展示方法及系统 | |
CN103309879A (zh) | 一种管理word文档中的标记的方法及装置 | |
CN103678426A (zh) | 一种全线站场图数据存储的方法、装置和处理器 | |
US10402484B2 (en) | Aligning annotation of fields of documents | |
CN104699664B (zh) | 一种模板独立的排版系统及方法 | |
CN105488471A (zh) | 一种字形识别方法及装置 | |
CN105955996A (zh) | 图片处理方法及装置 | |
CN103136166B (zh) | 字体确定方法和设备 | |
CN104424214B (zh) | 一种自定义提取目录内容的方法和装置 | |
CN110321125B (zh) | 单元格的数据配置方法、数据配置装置及可读存储介质 | |
CN109783139B (zh) | 软件界面特征提取方法、装置及电子设备 | |
CN111723142A (zh) | 一种数据处理方法及装置 | |
CN109871517B (zh) | 文字块排序方法、装置、存储介质及电子设备 |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200420 Address after: 310012 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Alibaba (China) Co.,Ltd. Address before: 102200, No. 18, No., Changsheng Road, Changping District science and Technology Park, Beijing, China. 1-5 Applicant before: AUTONAVI SOFTWARE Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |