一种加快文件读取的方法及计算机设备转让专利

申请号 : CN201810023780.X

文献号 : CN108319429B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 左冬杰

申请人 : 北京思特奇信息技术股份有限公司

摘要 :

本发明涉及一种加快文件读取的方法及计算机设备,该方法包括:当分区标识F标记为上半区时,判断P与B之和是否大于C的一半;若是,则从文件中读取数据存储到下半区,且所述读取的数据的字节长度与C的一半相等,并从P的位置开始B字节;根据B字节,确定数据体的字节长度L;根据L,直接从P的位置开始读取L的数据;将L作为返回数据返回,同时将P更新为P+L以及将分区标识F标记为下半区。还涉及一种计算机设备。通过本发明将数据进行封装,按照数据头+数据体的方式进行存储的应用系统,并通过单次读入最大数据的N倍,然后再逐条数据返回的方式减低对文件IO操作,大大提高了数据处理的效率和速度。

权利要求 :

1.一种加快文件读取的方法,其特征在于,该方法包括:

将预设内存数据块的存储容量的字节长度C划分为上半区和下半区,且用分区标识F作为上半区和下半区的标记;

当所述分区标识F标记为上半区时,判断当前偏移量P与当前数据的数据头的预设字节长度B之和是否大于所述字节长度C的一半;

若是,则从文件中读取数据存储到下半区,且所述读取的数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取数据头的预设字节长度B的数据;

根据所述数据头的预设字节长度B的数据,确定数据体的字节长度L;

根据所述字节长度L,直接从所述当前偏移量P的位置开始读取所述字节长度L的数据;

将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L以及将所述分区标识F标记为下半区;

其中,P为偏移量的字节长度,B为数据头的预设字节长度,C为预设内存数据块的存储容量的字节长度。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:当前偏移量P与当前数据的数据头的预设字节长度B之和小于所述字节长度C的一半时,则从内存数据块中直接读取字节长度B的数据;

根据所述字节长度B的数据,确定数据体的字节长度L;

判断L+P之和是否大于所述字节长度C的一半,若否,则直接从所述当前偏移量P的位置开始读取字节长度L的数据;

将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L,同时所述分区标识F标记保留为上半区。

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:当L+P之和大于所述字节长度C的一半时,则从文件中读取数据存储到下半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度L的数据;

将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L以及将所述分区标识F标记为下半区。

4.根据权利要求1-3任一所述的方法,其特征在于,当所述分区标识F标记为下半区时,判断所述当前偏移量P与所述数据头的预设字节长度B之和是否大于所述字节长度C;

若否,则从所述当前偏移量P的位置开始读取字节长度B的数据;

根据所述字节长度B的数据,确定所述数据体的字节长度L;

判断L+P之和是否大于所述字节长度C,若否,则直接从所述当前偏移量P的位置开始读取所述字节长度L的数据;

将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L,同时所述分区标识F标记保留为下半区。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:当L+P之和大于所述字节长度C时,则从文件中读取数据存储到上半区,且所述读取的数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度C-P的数据、且从内存数据块的初始位置开始读取字节长度L-(C-P)的数据;

将所述字节长度C-P的数据和所述字节长度L-(C-P)的数据作为返回数据返回,并将所述当前偏移量P更新为L-(C-P)以及将所述分区标识F标记为上半区。

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:当所述当前偏移量P与所述数据头的预设字节长度B之和大于所述字节长度C时,则从文件中读取数据存储到上半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度C-P的数据和从内存数据块的初始位置开始读取字节长度B-(C-P)的数据;

将所述字节长度C-P的数据和所述字节长度B-(C-P)的数据之和作为所述数据头的数据;

根据所述数据头的数据,确定所述数据体的字节长度L;

根据所述字节长度L,从所述当前偏移量P的位置开始读取字节长度C-P的数据和从上半区的数据中读取字节长度L-(C-P)的数据;

将所述字节长度C-P的数据和所述字节长度L-(C-P)的数据作为返回数据返回,并将所述当前偏移量P更新为L-(C-P)以及将所述分区标识F标记为上半区。

7.根据权利要求1-3任一所述的方法,其特征在于,该方法还包括:当首次从文件中读取数据存储到上半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从内存数据块中读取字节长度B的数据;

根据所述字节长度B的数据,确定所述数据体的字节长度L;

判断所述字节长度L是否大于所述字节长度C的一半,若否,则从当前偏移量P的位置直接从读取所述字节长度L的数据,其中首次读取时,当前偏移量P为0;

将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为L以及将所述分区标识F标记保留为上半区。

8.根据权利要求7所述的方法,其特征在于,判断所述数据体的字节长度L是否大于所述字节长度C的一半还包括:当所述字节长度L小于所述字节长度C的一半时,则从文件中读取数据存储到所述下半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并直接当前偏移量P的位置开始读取所述字节长度L的字节数据,其中首次读取时,当前偏移量P为0;

将所述字节长度L的字节数据作为返回数据返回,同时将所述当前偏移量P更新为L以及将所述分区标识F标记为下半区。

9.一种计算机设备,该计算机设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-8中任一项所述方法的步骤。

说明书 :

一种加快文件读取的方法及计算机设备

技术领域

[0001] 本发明属于领域,尤其涉及一种加快文件读取的方法及计算机设备。

背景技术

[0002] 传统的文件存储方式,采用比较普遍的方式是单条记录单行存放方式,所以在读取的时候采用也是单行读取的方式,这种读取方式每次读取一行,读取的次数和文件的行数相同,而且每次读取都需对存储数据的内存进行清空。
[0003] 传统按行读取方式较大的问题在于多次读取多次IO操作导致读取效率缓慢,所以在处理文件数据的应用系统时,随着处理文件系统的模块增加逐步会导致系统处理效率低。

发明内容

[0004] 本发明所要解决的技术问题是:读取文件的效率缓慢,从而导致处理效率低。
[0005] 为解决上面的技术问题,本发明提供了一种加快文件读取的方法,该方法包括:
[0006] S1、将预设内存数据块的存储容量的字节长度C划分为上半区和下半区,且用分区标识F作为上半区和下半区的标记;
[0007] S2、当所述分区标识F标记为上半区时,判断当前偏移量P与当前数据的数据头的字节长度B之和是否大于所述字节长度C的一半;
[0008] S3、若是,则从文件中读取数据存储到下半区,且所述读取的数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度B的数据;
[0009] S4、根据所述字节长度B的数据,确定数据体的字节长度L;
[0010] S5、根据所述字节长度L,直接从所述当前偏移量P的位置开始读取所述字节长度L的数据;
[0011] S6、将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L以及将所述分区标识F标记为下半区;
[0012] 其中,P为偏移量的字节长度,B为预设数据头的字节长度,C为预设内存数据块的存储容量的字节长度。
[0013] 本发明的有益效果:通过上述的方法将数据进行封装,按照数据头(含标识和数据体长度,数据头长度固定)+数据体的方式进行存储的应用系统。通过单次读入最大数据的N倍,然后再逐条数据返回的方式减低对文件IO操作,大大提高了数据处理的效率和速度。
[0014] 进一步地,所述方法还包括:
[0015] 当前偏移量P与当前数据的数据头的字节长度B之和小于所述字节长度C的一半时,则从内存数据块中直接读取字节长度B的数据;
[0016] 根据所述字节长度B的数据,确定数据体的字节长度L;
[0017] 判断L+P之和是否大于所述字节长度C的一半,若否,则直接从所述当前偏移量P的位置开始读取字节长度L的数据;
[0018] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L,同时所述分区标识F标记保留为上半区。
[0019] 进一步地,所述方法还包括:
[0020] 当L+P之和大于所述字节长度C的一半时,则从文件中读取数据存储到下半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度L的数据;
[0021] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L以及将所述分区标识F标记为下半区。
[0022] 进一步地,当所述分区标识F标记为下半区时,判断所述当前偏移量P与所述数据头的字节长度B之和是否大于所述字节长度C;
[0023] 若否,则从所述当前偏移量P的位置开始读取字节长度B的数据;
[0024] 根据所述字节长度B的数据,确定所述数据体的字节长度L;
[0025] 判断L+P之和是否大于所述字节长度C,若否,则直接从所述当前偏移量P的位置开始读取所述字节长度L的数据;
[0026] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L,同时所述分区标识F标记保留为下半区。
[0027] 进一步地,所述方法还包括:
[0028] 当L+P之和大于所述字节长度C时,则从文件中读取数据存储到上半区,且所述读取的数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度C-P的数据、且从内存数据块的初始位置开始读取字节长度L-(C-P)的数据;
[0029] 将所述字节长度C-P的数据和所述字节长度L-(C-P)的数据作为返回数据返回,并将所述当前偏移量P更新为L-(C-P)以及将所述分区标识F标记为上半区。
[0030] 进一步地,所述方法还包括:
[0031] 当所述当前偏移量P与所述数据头的字节长度B之和大于所述字节长度C时,则从文件中读取数据存储到上半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度C-P的数据和从内存数据块的初始位置开始读取字节长度B-(C-P)的数据;
[0032] 将所述字节长度C-P的数据和所述字节长度B-(C-P)的数据之和作为所述数据头的数据;
[0033] 根据所述数据头的数据,确定所述数据体的字节长度L;
[0034] 根据所述字节长度L,从所述当前偏移量P的位置开始读取字节长度C-P的数据和从上半区的数据中读取字节长度L-(C-P)的数据;
[0035] 将所述字节长度C-P的数据和所述字节长度L-(C-P)的数据作为返回数据返回,并将所述当前偏移量P更新为L-(C-P)以及将所述分区标识F标记为上半区。
[0036] 进一步地,该方法还包括:
[0037] 当首次从文件中读取数据存储到上半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从内存数据块中读取字节长度B的数据;
[0038] 根据所述字节长度B的数据,确定所述数据体的字节长度L;
[0039] 判断所述字节长度L是否大于所述字节长度C的一半,若否,则从当前偏移量P的位置直接从读取所述字节长度L的数据,其中首次读取时,当前偏移量P为0;
[0040] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为L以及将所述分区标识F标记保留为上半区。
[0041] 进一步地,判断所述数据体的字节长度L是否大于所述字节长度C的一半还包括:
[0042] 当所述字节长度L小于所述字节长度C的一半时,则从文件中读取数据存储到所述下半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并直接当前偏移量P的位置开始读取所述字节长度L的字节数据,其中首次读取时,当前偏移量P为0;
[0043] 将所述字节长度L的字节数据作为返回数据返回,同时将所述当前偏移量P更新为L以及将所述分区标识F标记为下半区。
[0044] 本发明还涉及一种计算机设备,该计算机设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如上所述方法的步骤。
[0045] 本发明的有益效果:通过将数据进行封装,按照数据头(含标识和数据体长度,数据头长度固定)+数据体的方式进行存储的应用系统。通过单次读入最大数据的N倍,然后再逐条数据返回的方式减低对文件IO操作,大大提高了数据处理的效率和速度。

附图说明

[0046] 图1为本发明的一种加快文件读取的方法的流程图;
[0047] 图2为本发明的一种加快文件读取的方法的示意图;
[0048] 图3为本发明的一种计算机设备的结构示意图。

具体实施方式

[0049] 以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0050] 在本发明中电信计费系统中TLV结构数据读,调用数据读取方法,从文件中不断获取数据记录,单条数据最大长度大小为2048字节,按块读取的块存储变量(以下用C来标记)是4096字节,头长度(以下用B标记)是3位,其中第一位是标识,第二位和第三位是长度标识,偏移量用P标记。
[0051] 如图1和图2所示,本发明实施例1提供的是一种加快文件读取的方法,该方法包括:
[0052] S1、将预设内存数据块的存储容量的字节长度C划分为上半区和下半区,且用分区标识F作为上半区和下半区的标记;
[0053] S2、当所述分区标识F标记为上半区时,判断当前偏移量P与当前数据的数据头的字节长度B之和是否大于所述字节长度C的一半;
[0054] S3、若是,则从文件中读取数据存储到下半区,且所述读取的数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度B的数据;
[0055] S4、根据所述字节长度B的数据,确定数据体的字节长度L;
[0056] S5、根据所述字节长度L,直接从所述当前偏移量P的位置开始读取所述字节长度L的数据;
[0057] S6、将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L以及将所述分区标识F标记为下半区;
[0058] 其中,P为偏移量的字节长度,B为预设数据头的字节长度,C为预设内存数据块的存储容量的字节长度。
[0059] 在本实施例1中通过下面的方式进行解析说明,F为上半区时,则判断P+B>2048是否成立,如成立,则再读入2048字节放置C的后半区,然后从P的位置开始读取B字节,根据这B字节得出数据的长度L,然后直接P的当前位置获取L字节长度作为数据,此时更新P=P+L,分区使用标识F为下半区。
[0060] 通过上述的方法将数据进行封装,按照数据头(含标识和数据体长度,数据头长度固定)+数据体的方式进行存储的应用系统。通过单次读入最大数据的N倍,然后再逐条数据返回的方式减低对文件IO操作,大大提高了数据处理的效率和速度。
[0061] 可选地,在另一实施例2中所述方法还包括:
[0062] 当前偏移量P与当前数据的数据头的字节长度B之和小于所述字节长度C的一半时,则从内存数据块中直接读取字节长度B的数据;
[0063] 根据所述字节长度B的数据,确定数据体的字节长度L;
[0064] 判断L+P之和是否大于所述字节长度C的一半,若否,则直接从所述当前偏移量P的位置开始读取字节长度L的数据;
[0065] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L,同时所述分区标识F标记保留为上半区。
[0066] 需要说明的是,本实施例2是在上述实施例1的技术方案的基础上进行的另一方案,在本实施例2中如果P+B>2048不成立,则读取B字节,得出数据长度L,判断L+P>2048是否成立,如果不成立,则直接从P位置读取L长度作为数据返回,并且更新当前偏移量P=P+L,分区使用标识F仍然为上半区。
[0067] 可选地,在另一实施例3中所述方法还包括:
[0068] 当L+P之和大于所述字节长度C的一半时,则从文件中读取数据存储到下半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度L的数据;
[0069] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L以及将所述分区标识F标记为下半区。
[0070] 需要说明的是,本实施例3是在上述实施例2的基础上进行的另一方案,如L+P>2048成立,则读取2048字节放置C的后半区,然后直接从P位置读取L长度作为数据返回,更新偏移量P=P+L,更新分区使用标识F为下半区。
[0071] 可选地,在另一实施例4中当所述分区标识F标记为下半区时,判断所述当前偏移量P与所述数据头的字节长度B之和是否大于所述字节长度C;
[0072] 若否,则从所述当前偏移量P的位置开始读取字节长度B的数据;
[0073] 根据所述字节长度B的数据,确定所述数据体的字节长度L;
[0074] 判断L+P之和是否大于所述字节长度C,若否,则直接从所述当前偏移量P的位置开始读取所述字节长度L的数据;
[0075] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为P+L,同时所述分区标识F标记保留为下半区。
[0076] 需要说明的是,本实施例4是另一技术方案,当F为下半区时,判断P+B>4096是否成立,若小于,从P的位置读取字节长度B的数据,根据该字节长度B的数据分析出数据头的字节长度L,如果L+P<=4096,则直接从P的位置读取L长度的数据作为返回数据返回,并更新当前偏移量为P=P+L,分区使用标识F为下半区。
[0077] 可选地,在另一实施例5中所述方法还包括:
[0078] 当L+P之和大于所述字节长度C时,则从文件中读取数据存储到上半区,且所述读取的数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度C-P的数据、且从内存数据块的初始位置开始读取字节长度L-(C-P)的数据;
[0079] 将所述字节长度C-P的数据和所述字节长度L-(C-P)的数据作为返回数据返回,并将所述当前偏移量P更新为L-(C-P)以及将所述分区标识F标记为上半区。
[0080] 需要说明的是,本实施例5在上述实施例4的基础上进行的技术方案,在本实施例5中当L+P>4096时,则从文件中读取2048字节放置到C的上半区,则从P的位置读取“字节长度4096-P的数据”+“从C初始位置获取字节长度L-(4096-P)的数据”作为返回数据返回,并更新当前偏移量P=L-(4096-P),更新分区使用标记为上半区。
[0081] 可选地,在另一实施例6中所述方法还包括:
[0082] 当所述当前偏移量P与所述数据头的字节长度B之和大于所述字节长度C时,则从文件中读取数据存储到上半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从所述当前偏移量P的位置开始读取字节长度C-P的数据和从内存数据块的初始位置开始读取字节长度B-(C-P)的数据;
[0083] 将所述字节长度C-P的数据和所述字节长度B-(C-P)的数据之和作为所述数据头的数据;
[0084] 根据所述数据头的数据,确定所述数据体的字节长度L;
[0085] 根据所述字节长度L,从所述当前偏移量P的位置开始读取字节长度C-P的数据和从上半区的数据中读取字节长度L-(C-P)的数据;
[0086] 将所述字节长度C-P的数据和所述字节长度L-(C-P)的数据作为返回数据返回,并将所述当前偏移量P更新为L-(C-P)以及将所述分区标识F标记上半区。
[0087] 需要说明的是,本实施例6是在上述实施例5的基础上进行的技术方案,在本实施例6中当F为下半区时,且P+B>4096,从文件中再次读取2048个字节放置到C上半区,“P开始读取4096-P个字节”+“C初始位置读取B-(4096-P)”个字节作为数据头,并根据数据头分析得出数据长度L,然后组合返回数据,该组合数据是由下半区P开始到4096,以及C上半区L-(4096-P)两部分组成。此时更新分区使用标识F为上半区,偏移量为P=L-(4096-P)。
[0088] 可选地,在另一实施例7中该方法还包括:
[0089] 当首次从文件中读取数据存储到上半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并从内存数据块中读取字节长度B的数据;
[0090] 根据所述字节长度B的数据,确定所述数据体的字节长度L;
[0091] 判断所述字节长度L是否大于所述字节长度C的一半,若否,则从当前偏移量P的位置直接从读取所述字节长度L的数据,其中首次读取时,当前偏移量P为0;
[0092] 将所述字节长度L的数据作为返回数据返回,同时将所述当前偏移量P更新为L以及将所述分区标识F标记保留为上半区。
[0093] 需要说明的是,本实施例7中是在上述实施例1-实施例3的基础上进行的方案,首次启动从文件中按块读取2048(C容量的一半)个字节到C的前(上)半区。读取数据头长度B个字节,然后解析出当前数据长度L,首次读取偏移量P为0,如L<=2048,则直接从P读取L个字节作为数据即可,此时记录使用分区标识F为上半区,偏移量为P=L。
[0094] 可选地,在另一实施例8中判断所述数据体的字节长度L是否大于所述字节长度C的一半还包括:
[0095] 当所述字节长度L小于所述字节长度C的一半时,则从文件中读取数据存储到所述下半区,且所述读取数据的字节长度与所述字节长度C的一半相等,并直接当前偏移量P的位置开始读取所述字节长度L的字节数据,其中首次读取时,当前偏移量P为0;
[0096] 将所述字节长度L的字节数据作为返回数据返回,同时将所述当前偏移量P更新为L以及将所述分区标识F标记为下半区。
[0097] 需要说明的是,本实施例8是在上述实施例7的基础上进行的方案,在本实施例8中是如果L>2048,则从文件中再读取2048字节存储到C的下半区,然后直接从P开始读取L个字节作为数据,此时记录使用分区标识F为下半区,偏移量P=L。
[0098] 本发明实施例9还涉及一种计算机设备,该计算机设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如上所述方法的步骤。
[0099] 在本实施例9中通过将数据进行封装,按照数据头(含标识和数据体长度,数据头长度固定)+数据体的方式进行存储的应用系统。通过单次读入最大数据的N倍,然后再逐条数据返回的方式减低对文件IO操作,大大提高了数据处理的效率和速度。
[0100] 在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0101] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。