一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于内存映射的可变长数据存取方法及系统与流程

2022-07-10 12:32:32 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,特别指一种基于内存映射的可变长数据存取方法及系统。


背景技术:

2.内存映射是操作系统提供的一种新的文件数据存取技术,内存映射即在内存空间中为文件数据保留一存储空间,并将文件数据映射到该存储空间,操作系统直接通过映射的文件数据进行管理页映射缓冲以及高速缓冲等任务,不需要调用、分配、释放内存块和文件i/o操作。由于无需将文件数据加载到内存、数据从内存到文件数据的回写以及释放内存块等步骤,使得内存映射技术在处理大数据量的文件数据时起到相当重要的作用。
3.然而,传统的内存映射技术采用固定长度的数据结构,即只能映射一些固定长度的字段,无法满足动态变长结构数据的存取需求。例如锂电池在生产过程中需要进行一系列的测试,测量过程中会使用到大量的辅助设备,并产生大量的长度不定的数据,而传统的内存映射技术无法适用于该场景。
4.因此,如何提供一种基于内存映射的可变长数据存取方法及系统,实现动态映射可变长数据,以提升适用范围,成为一个亟待解决的技术问题。


技术实现要素:

5.本发明要解决的技术问题,在于提供一种基于内存映射的可变长数据存取方法及系统,实现动态映射可变长数据,以提升适用范围。
6.第一方面,本发明提供了一种基于内存映射的可变长数据存取方法,包括如下步骤:
7.步骤s10、在内存中预留一映射空间,并创建一映射文件结构;
8.步骤s20、获取不定长的映射数据,基于所述映射数据以及映射文件结构动态生成映射文件,并将所述映射文件映射至映射空间;
9.步骤s30、从所述映射空间获取映射文件并进行校验;
10.步骤s40、动态创建解析模型解析所述映射文件得到映射数据,完成所述映射数据的存取。
11.进一步地,所述步骤s10中,所述映射文件结构具体包括一文件头以及一数据区;
12.所述文件头至少包括总数据条数、数据总长度、可变数据总长度、第一校验值;
13.所述数据区包括若干条映射内容,各所述映射内容至少包括定长数据、变长数据以及第二校验值。
14.进一步地,所述步骤s20具体为:
15.获取不定长的映射数据,基于所述映射文件结构,统计所述映射数据的总数据条数、数据总长度以及可变数据总长度,并对所有的所述映射数据统一进行哈希计算得到第一校验值,基于所述总数据条数、数据总长度、可变数据总长度以及第一校验值动态生成文
件头;
16.将各所述映射数据划分为定长数据和变长数据,对所述定长数据和变长数据进行哈希计算计算第二校验值,基于各所述定长数据、变长数据以及第二校验值生成映射内容;
17.基于所述文件头以及各映射内容动态生成映射文件,并将所述映射文件实时映射至映射空间。
18.进一步地,所述步骤s30具体包括:
19.步骤s31、创建一用于访问所述映射文件的访问器,利用所述访问器访问内存中的映射文件;
20.步骤s32、解析所述映射文件得到文件头以及数据区,判断所述数据区包含映射内容的条数是否等于总数据条数,若是,则进入步骤s33;若否,则结束流程;
21.步骤s33、判断所述数据区中各映射内容的变长数据的长度之和是否等于可变数据总长度,若是,则进入步骤s34;若否,则结束流程;
22.步骤s34、判断所述数据区中各映射内容的变长数据与定长数据的长度之和是否等于数据总长度,若是,则进入步骤s35;若否,则结束流程;
23.步骤s35、基于所述映射文件携带的第一校验值和第二校验值,依次对所述文件头和映射内容进行哈希校验,若校验成功,则进入步骤s40;若校验失败,则结束流程。
24.进一步地,所述步骤s40具体为:
25.基于所述映射文件的各映射内容的定长数据和变长数据的长度,动态创建对应数据类型的解析模型,进而利用各所述解析模型循环解析映射数据的定长数据和变长数据,以完成所述映射数据的存取。
26.第二方面,本发明提供了一种基于内存映射的可变长数据存取系统,包括如下模块:
27.映射文件结构创建模块,用于在内存中预留一映射空间,并创建一映射文件结构;
28.映射文件生成模块,用于获取不定长的映射数据,基于所述映射数据以及映射文件结构动态生成映射文件,并将所述映射文件映射至映射空间;
29.映射文件校验模块,用于从所述映射空间获取映射文件并进行校验;
30.映射文件解析模块,用于动态创建解析模型解析所述映射文件得到映射数据,完成所述映射数据的存取。
31.进一步地,所述映射文件结构创建模块中,所述映射文件结构具体包括一文件头以及一数据区;
32.所述文件头至少包括总数据条数、数据总长度、可变数据总长度、第一校验值;
33.所述数据区包括若干条映射内容,各所述映射内容至少包括定长数据、变长数据以及第二校验值。
34.进一步地,所述映射文件生成模块具体为:
35.获取不定长的映射数据,基于所述映射文件结构,统计所述映射数据的总数据条数、数据总长度以及可变数据总长度,并对所有的所述映射数据统一进行哈希计算得到第一校验值,基于所述总数据条数、数据总长度、可变数据总长度以及第一校验值动态生成文件头;
36.将各所述映射数据划分为定长数据和变长数据,对所述定长数据和变长数据进行
哈希计算计算第二校验值,基于各所述定长数据、变长数据以及第二校验值生成映射内容;
37.基于所述文件头以及各映射内容动态生成映射文件,并将所述映射文件实时映射至映射空间。
38.进一步地,所述映射文件校验模块具体包括:
39.映射文件访问单元,用于创建一用于访问所述映射文件的访问器,利用所述访问器访问内存中的映射文件;
40.总数据条数校验单元,用于解析所述映射文件得到文件头以及数据区,判断所述数据区包含映射内容的条数是否等于总数据条数,若是,则进入可变数据总长度校验单元;若否,则结束流程;
41.可变数据总长度校验单元,用于判断所述数据区中各映射内容的变长数据的长度之和是否等于可变数据总长度,若是,则进入数据总长度校验单元;若否,则结束流程;
42.数据总长度校验单元,用于判断所述数据区中各映射内容的变长数据与定长数据的长度之和是否等于数据总长度,若是,则进入哈希校验单元;若否,则结束流程;
43.哈希校验单元,用于基于所述映射文件携带的第一校验值和第二校验值,依次对所述文件头和映射内容进行哈希校验,若校验成功,则进入映射文件解析模块;若校验失败,则结束流程。
44.进一步地,所述映射文件解析模块具体为:
45.基于所述映射文件的各映射内容的定长数据和变长数据的长度,动态创建对应数据类型的解析模型,进而利用各所述解析模型循环解析映射数据的定长数据和变长数据,以完成所述映射数据的存取。
46.本发明的优点在于:
47.1、通过创建包括文件头以及数据区的映射文件结构,文件头记录了总数据条数、数据总长度以及可变数据总长度,数据区记录了包括定长数据以及变长数据的若干条映射内容,再基于映射文件结构将不定长的映射数据动态生成映射文件映射至映射空间,并动态创建解析模型解析映射文件得到映射数据,即实现动态映射可变长数据,进而极大的提升了内存映射技术的适用范围。
48.2、通过设置映射文件包括总数据条数、数据总长度、可变数据总长度、第一校验值以及第二校验值,并将映射数据划分为定长数据和变长数据,通过总数据条数、数据总长度、可变数据总长度、定长数据以及变长数据可对映射数据的数量及长度进行校验,判断数据是否有缺失;通过第一校验值以及第二校验值可对映射文件进行哈希校验,判断映射文件是否被篡改,进而极大的提升了内存映射的安全性。
附图说明
49.下面参照附图结合实施例对本发明作进一步的说明。
50.图1是本发明一种基于内存映射的可变长数据存取方法的流程图。
51.图2是本发明一种基于内存映射的可变长数据存取系统的结构示意图。
具体实施方式
52.请参照图1至图2所示,本发明一种基于内存映射的可变长数据存取方法的较佳实
施例,包括如下步骤:
53.步骤s10、在内存中预留一用于存储映射文件的映射空间,并创建一用于生成映射文件的映射文件结构;
54.步骤s20、获取不定长的映射数据,基于所述映射数据以及映射文件结构动态生成映射文件,并将所述映射文件映射至映射空间;
55.步骤s30、从所述映射空间获取映射文件并进行校验;
56.步骤s40、动态创建解析模型解析所述映射文件得到映射数据,完成所述映射数据的存取。
57.所述步骤s10中,所述映射文件结构具体包括一文件头(header)以及一数据区(data);
58.所述文件头至少包括总数据条数、数据总长度、可变数据总长度、第一校验值;
59.所述数据区包括若干条映射内容,各所述映射内容至少包括定长数据、变长数据以及第二校验值;所述定长数据必须为结构体,例如c#中的struct;所述变长数据为数组成员,例如c#中float[]数组。
[0060]
所述步骤s20具体为:
[0061]
获取不定长的映射数据,基于所述映射文件结构,实时统计所述映射数据的总数据条数、数据总长度以及可变数据总长度,并对所有的所述映射数据统一进行哈希计算得到第一校验值,基于所述总数据条数、数据总长度、可变数据总长度以及第一校验值动态生成文件头;
[0062]
将各所述映射数据划分为定长数据和变长数据,对所述定长数据和变长数据进行哈希计算计算第二校验值,基于各所述定长数据、变长数据以及第二校验值生成映射内容;
[0063]
基于所述文件头以及各映射内容动态生成映射文件,并将所述映射文件通过内存映射技术实时映射至映射空间,例如利用c#中memorymappedfile的createfromfile方法将所述映射文件映射至映射空间。
[0064]
所述步骤s30具体包括:
[0065]
步骤s31、创建一用于访问所述映射文件的访问器,例如c#中的memorymappedviewaccessor,利用所述访问器访问内存中的映射文件;
[0066]
步骤s32、解析所述映射文件得到文件头以及数据区,判断所述数据区包含映射内容的条数是否等于总数据条数,若是,则进入步骤s33;若否,则结束流程;
[0067]
步骤s33、判断所述数据区中各映射内容的变长数据的长度之和是否等于可变数据总长度,若是,则进入步骤s34;若否,则结束流程;
[0068]
步骤s34、判断所述数据区中各映射内容的变长数据与定长数据的长度之和是否等于数据总长度,若是,则进入步骤s35;若否,则结束流程;
[0069]
步骤s35、基于所述映射文件携带的第一校验值和第二校验值,依次对所述文件头和映射内容进行哈希校验,若校验成功,则进入步骤s40;若校验失败,则结束流程。哈希校验即判断两次的哈希计算结果是否一致,一致则校验通过。
[0070]
通过设置映射文件包括总数据条数、数据总长度、可变数据总长度、第一校验值以及第二校验值,并将映射数据划分为定长数据和变长数据,通过总数据条数、数据总长度、可变数据总长度、定长数据以及变长数据可对映射数据的数量及长度进行校验,判断数据
是否有缺失;通过第一校验值以及第二校验值可对映射文件进行哈希校验,判断映射文件是否被篡改,进而极大的提升了内存映射的安全性。
[0071]
所述步骤s40具体为:
[0072]
基于所述映射文件的各映射内容的定长数据和变长数据的长度,动态创建对应数据类型的解析模型,进而利用各所述解析模型循环解析映射数据的定长数据和变长数据,以完成所述映射数据的存取;例如利用memorymappedviewaccessor.read《t》方法解析定长数据,利用memorymappedviewaccessor.readarray方法解析变长数据。
[0073]
本发明一种基于内存映射的可变长数据存取系统的较佳实施例,包括如下模块:
[0074]
映射文件结构创建模块,用于在内存中预留一用于存储映射文件的映射空间,并创建一用于生成映射文件的映射文件结构;
[0075]
映射文件生成模块,用于获取不定长的映射数据,基于所述映射数据以及映射文件结构动态生成映射文件,并将所述映射文件映射至映射空间;
[0076]
映射文件校验模块,用于从所述映射空间获取映射文件并进行校验;
[0077]
映射文件解析模块,用于动态创建解析模型解析所述映射文件得到映射数据,完成所述映射数据的存取。
[0078]
所述映射文件结构创建模块中,所述映射文件结构具体包括一文件头(header)以及一数据区(data);
[0079]
所述文件头至少包括总数据条数、数据总长度、可变数据总长度、第一校验值;
[0080]
所述数据区包括若干条映射内容,各所述映射内容至少包括定长数据、变长数据以及第二校验值;所述定长数据必须为结构体,例如c#中的struct;所述变长数据为数组成员,例如c#中float[]数组。
[0081]
所述映射文件生成模块具体为:
[0082]
获取不定长的映射数据,基于所述映射文件结构,实时统计所述映射数据的总数据条数、数据总长度以及可变数据总长度,并对所有的所述映射数据统一进行哈希计算得到第一校验值,基于所述总数据条数、数据总长度、可变数据总长度以及第一校验值动态生成文件头;
[0083]
将各所述映射数据划分为定长数据和变长数据,对所述定长数据和变长数据进行哈希计算计算第二校验值,基于各所述定长数据、变长数据以及第二校验值生成映射内容;
[0084]
基于所述文件头以及各映射内容动态生成映射文件,并将所述映射文件通过内存映射技术实时映射至映射空间,例如利用c#中memorymappedfile的createfromfile方法将所述映射文件映射至映射空间。
[0085]
所述映射文件校验模块具体包括:
[0086]
映射文件访问单元,用于创建一用于访问所述映射文件的访问器,例如c#中的memorymappedviewaccessor,利用所述访问器访问内存中的映射文件;
[0087]
总数据条数校验单元,用于解析所述映射文件得到文件头以及数据区,判断所述数据区包含映射内容的条数是否等于总数据条数,若是,则进入可变数据总长度校验单元;若否,则结束流程;
[0088]
可变数据总长度校验单元,用于判断所述数据区中各映射内容的变长数据的长度之和是否等于可变数据总长度,若是,则进入数据总长度校验单元;若否,则结束流程;
[0089]
数据总长度校验单元,用于判断所述数据区中各映射内容的变长数据与定长数据的长度之和是否等于数据总长度,若是,则进入哈希校验单元;若否,则结束流程;
[0090]
哈希校验单元,用于基于所述映射文件携带的第一校验值和第二校验值,依次对所述文件头和映射内容进行哈希校验,若校验成功,则进入映射文件解析模块;若校验失败,则结束流程。哈希校验即判断两次的哈希计算结果是否一致,一致则校验通过。
[0091]
通过设置映射文件包括总数据条数、数据总长度、可变数据总长度、第一校验值以及第二校验值,并将映射数据划分为定长数据和变长数据,通过总数据条数、数据总长度、可变数据总长度、定长数据以及变长数据可对映射数据的数量及长度进行校验,判断数据是否有缺失;通过第一校验值以及第二校验值可对映射文件进行哈希校验,判断映射文件是否被篡改,进而极大的提升了内存映射的安全性。
[0092]
所述映射文件解析模块具体为:
[0093]
基于所述映射文件的各映射内容的定长数据和变长数据的长度,动态创建对应数据类型的解析模型,进而利用各所述解析模型循环解析映射数据的定长数据和变长数据,以完成所述映射数据的存取;例如利用memorymappedviewaccessor.read《t》方法解析定长数据,利用memorymappedviewaccessor.readarray方法解析变长数据。
[0094]
综上所述,本发明的优点在于:
[0095]
1、通过创建包括文件头以及数据区的映射文件结构,文件头记录了总数据条数、数据总长度以及可变数据总长度,数据区记录了包括定长数据以及变长数据的若干条映射内容,再基于映射文件结构将不定长的映射数据动态生成映射文件映射至映射空间,并动态创建解析模型解析映射文件得到映射数据,即实现动态映射可变长数据,进而极大的提升了内存映射技术的适用范围。
[0096]
2、通过设置映射文件包括总数据条数、数据总长度、可变数据总长度、第一校验值以及第二校验值,并将映射数据划分为定长数据和变长数据,通过总数据条数、数据总长度、可变数据总长度、定长数据以及变长数据可对映射数据的数量及长度进行校验,判断数据是否有缺失;通过第一校验值以及第二校验值可对映射文件进行哈希校验,判断映射文件是否被篡改,进而极大的提升了内存映射的安全性。
[0097]
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献