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

一种数据处理方法和装置与流程

2022-06-11 06:05:43 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种数据处理方法和装置。


背景技术:

2.mmkv是一种基于内存映射(memory mapping,mmap)的存储组件,可以通过key-value的方式对应用程序中的数据进行存储,具有读写效率高、多进程并发以及稳定性强的优点。
3.然而,目前在基于mmkv存储应用程序中的数据时,存储的都是无类型的数据,这样,当应用程序需要读取已存储的某种类型的数据时,就会导致无法准确读取目标数据。


技术实现要素:

4.本技术实施例提供一种数据处理方法和装置,用于解决无法准确读取通过mmkv存储的数据的问题。
5.为解决上述技术问题,本技术实施例是这样实现的:
6.第一方面,提出一种数据处理方法,包括:
7.获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
8.根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
9.在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
10.将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
11.第二方面,提出一种数据处理装置,包括:
12.获取模块,获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
13.第一存储模块,根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
14.添加模块,在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
15.第二存储模块,将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
16.第三方面,提出一种电子设备,该电子设备包括:
17.处理器;以及
18.被安排成存储计算机可执行指令的存储器,该可执行指令在被执行时使该处理器执行以下操作:
19.获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
20.根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行
封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
21.在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
22.将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
23.第四方面,提出一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下方法:
24.获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
25.根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
26.在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
27.将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
28.本技术实施例采用的上述至少一个技术方案能够达到以下有益效果:
29.本技术实施例可以预先对mmkv的原生接口进行封装,当需要存储应用程序中的目标数据时,可以根据目标数据的数据类型调用封装后的第一接口,在第一接口的key中添加类型标识得到目标key,然后将原生的第二接口中的key替换为目标key,并调用第二接口存储目标数据,其中,第一接口是对第二接口进行封装后得到的接口,第二接口是mmkv原生接口中用于存储目标数据的接口,目标key中的类型标识可以表征目标数据的数据类型。这样,通过对mmkv的原生接口进行封装,然后通过封装后的接口将原生接口中的key替换为包含有类型标识的key,并调用原生接口进行数据存储,可以在不改变mmkv源码的情况下,实现对数据的类型化存储,当应用程序中的其他进程或第三方应用需要读取已存储的数据时,可以根据key中包含的类型标识调用相应的接口进行数据读取,从而可以准确读取目标数据。
附图说明
30.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
31.图1是本技术的一个实施例数据处理方法的流程示意图;
32.图2是本技术的一个实施例目标文件获取方法的流程示意图;
33.图3是本技术的一个实施例绑定后台服务的方法的流程示意图;
34.图4是本技术的一个实施例数据获取方法的流程示意图;
35.图5是本技术的一个实施例电子设备的结构示意图;
36.图6是本技术的一个实施例数据处理装置的结构示意图。
具体实施方式
37.为了使本技术领域的人员更好地理解本技术中的技术方案,下面将结合本技术实
施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
38.mmkv是一种基于mmap的存储组件,可以通过key-value的方式存储不同数据类型的应用数据,比如,可以存储int、string、long、float等不同数据类型的应用数据。然而,目前在基于mmkv存储应用数据时,存储的都是无类型的数据,即在存储应用数据后并不会区分已存储的应用数据的数据类型。这样,当应用程序中的其他进程或第三方应用需要读取已存储的应用数据时,由于已存储的应用数据并没区分数据类型,因此,将无法准确调用相应的接口进行数据读取,进而导致无法准确读取目标数据。
39.为了解决上述技术问题,本技术实施例提供一种数据处理方法和装置,可以预先对mmkv的原生接口进行封装,当需要存储应用程序中的目标数据时,可以根据目标数据的数据类型调用封装后的第一接口,在第一接口的key中添加类型标识得到目标key,然后将原生的第二接口中的key替换为目标key,并调用第二接口存储目标数据,其中,第一接口是对第二接口进行封装后得到的接口,第二接口是mmkv原生接口中用于存储目标数据的接口,目标key中的类型标识可以表征目标数据的数据类型。这样,通过对mmkv的原生接口进行封装,然后通过封装后的接口将原生接口中的key替换为包含有类型标识的key,并调用原生接口进行数据存储,可以在不改变mmkv源码的情况下,实现对数据的类型化存储,当应用程序中的其他进程或第三方应用需要读取已存储的数据时,可以根据key中包含的类型标识调用相应的接口进行数据读取,从而可以准确读取目标数据。
40.需要说明的是,本技术实施例的应用场景包括但不限于以下两种:
41.第一种场景:应用程序中的第一进程基于mmkv存储应用数据,应用程序中的第二进程(应用程序中除第一进程以外的其他进程)读取由第一进程存储的应用数据;
42.第二种场景:应用程序中的第一进程基于mmkv存储应用数据,第三方应用读取由第一进程存储的应用数据。
43.为了便于描述本技术实施例提供的技术方案,以下将以上述第一种场景为例进行说明。
44.以下结合附图,详细说明本技术各实施例提供的技术方案。
45.图1是本技术的一个实施例数据处理方法的流程示意图。所述数据处理方法如下所述。
46.s102:获取待基于mmkv存储的目标数据,mmkv通过key-value的方式进行数据存储。
47.应用程序在需要基于mmkv存储某个目标数据时,可以获取该目标数据。目标数据可以是应用程序的属性数据,也可以是应用程序在运行过程中产生的数据,这里不做具体限定。
48.s104:根据目标数据的数据类型调用第一接口,第一接口通过对第二接口进行封装后得到,第二接口为mmkv的原生接口中用于存储目标数据的接口。
49.在s104中,可以预先对mmkv的多个原生接口进行封装,得到多个封装后的接口。该多个原生接口可以包括数据存储接口、数据获取(读取)接口以及其他接口等,其中,数据存
储接口可以包括对不同数据类型的数据进行存储的接口,且一个数据存储接口可以用于对一种数据类型的数据进行存储。数据获取接口可以包括对不同数据类型的数据进行读取的接口,且一个数据获取接口可以用于对一种数据类型的数据进行读取。其他接口可以是原生接口中除数据存储接口和数据获取接口以外的接口。
50.可选地,在对mmkv的多个原生接口进行封装时,可以使用mmkvwrapper类进行封装。封装后的多个接口可以与多个原生接口一一对应。
51.为了便于理解mmkv的原生接口和封装后的接口,可以参见表1。
52.表1
53.mmkvmmkvwrapper接口说明initializeinit初始化getstringgetstring获取string类型值getstringsetgetstringset获取string集getintgetint获取int类型值getlonggetlong获取long类型值getfloatgetfloat获取float类型值getbooleangetboolean获取boolean类型值setstringsetstring设置string类型值setintsetint设置int类型值setlongsetlong设置long类型值setfloatsetfloat设置float类型值setbooleansetboolean设置boolean类型值setstringsetsetstringset设置string集类型值removeremove移除键值对containscontains判断是否包含某一个键
54.表1的第一列为mmkv的原生接口,第二列为使用mmkvwrapper类对原生接口进行封装后得到的接口,第三列为原生接口/封装后的接口的接口说明。从表1可以看出,在对mmkv的原生接口进行封装后,可以得到与原生接口一一对应的封装后的接口。
55.在表1所示的mmkv原生接口中,以“set”开头的接口为数据存储接口,不同的数据存储接口用于存储不同数据类型的数据。比如,setstring接口用于存储string类型的数据,setint接口用于存储int类型的数据。以“get”开头的接口为数据获取接口,不同的数据获取接口用于读取不同数据类型的数据,比如,getstring接口用于读取string类型的数据,getfloat接口用于读取float类型的数据。
56.在表1所示的封装后的接口中,以“set”开头的接口为封装后的数据存储接口,不同的数据存储接口用于存储不同数据类型的数据,比如,封装后的setstring接口用于存储string类型的数据,封装后的setint接口用于存储int类型的数据。以“get”开头的接口为封装后的数据获取接口,不同的数据获取接口用于读取不同数据类型的数据,比如,封装后的getstring接口用于读取string类型的数据,封装后的getfloat接口用于读取float类型的数据。
57.此外,表1中还包括除数据存储接口和数据获取接口以外的其他接口,以及与该其
他接口对应的封装后的接口,这些其他接口可以在相应场景下使用,这里不再详细说明。
58.本技术实施例中,在对mmkv的原生接口进行封装后,当需要进行数据存储时,可以先调用封装后的接口,再调用原生接口,这样,可以实现对数据的类型化存储。
59.具体地,在获取到待使用mmkv存储的目标数据后,可以根据目标数据的数据类型调用第一接口。第一接口是对第二接口进行封装后得到的接口,第二接口是mmkv的原生接口中用于存储目标数据的接口,即第二接口是mmkv的原生接口中用于存储某种数据类型的数据的接口,第一接口是封装后的接口中用于存储该某种数据类型的数据的接口,该某种数据类型即为目标数据的数据类型。
60.比如,目标数据的数据类型为string,则根据数据类型string调用的第一接口可以是表1中封装后的setstring接口,即调用mmkvwrapper.setstring接口,mmkvwrapper.setstring接口是对原生的mmkv.setstring接口(即第二接口)进行封装后得到的接口,mmkvwrapper.setstring接口和mmkv.setstring接口均用于存储string类型的数据。
61.再比如,目标数据的数据类型为int,则根据数据类型int调用的第一接口可以是表1中封装后的setint接口,即调用mmkvwrapper.setint接口,mmkvwrapper.setint接口是对原生的mmkv.setint接口(即第二接口)进行封装后得到的接口,mmkvwrapper.setint接口和mmkv.setint接口均用于存储int类型的数据。
62.在调用第一接口后,可以执行s106。
63.s106:在第一接口的key中添加数据类型的类型标识,得到目标key。
64.由于第一接口是对mmkv原生的第二接口进行封装后得到的接口,mmkv通过key-value的方式进行数据存储,因此,第一接口也是通过key-value的方式进行数据存储。这样,在调用第一接口存储目标数据时,第一接口中可以携带目标数据的key和value。
65.在s106中,可以在第一接口中的key中添加类型标识得到目标key,目标key中包括第一接口中的key以及类型标识。其中,类型标识可以表征目标数据的数据类型,不同的数据类型可以对应添加不同的类型标识,即数据类型和类型标识之间可以是一一对应的关系。在key中添加类型标识时,可以直接将key与类型标识进行组合。
66.可选地,作为一个实施例,类型标识可以是类型后缀,类型后缀可以由“#”和指定字符组成。该指定字符可以是数据类型的英文单词首字母,也可以是预先指定的其他字符,且不同类型后缀中的指定字符不同。以指定字符为数据类型的英文单词的首字母为例,类型后缀可以如表2所示。
67.表2
68.[0069][0070]
表2中,类型后缀可以由“#”以及数据类型的英文单词中的首字母(即指定字符)组成。比如,针对int数据类型,类型后缀可以是“#i”,针对string数据类型,类型后缀可以是“#s”。表2中,不同的数据类型可以对应不同的类型后缀。
[0071]
在基于表2中的类型后缀在第一接口的key中添加类型标识时,可以直接将类型后缀与key进行组合。比如,在调用第一接口mmkvwrapper.setstring存储数据类型为string、key为test、value为hello的目标数据时,即调用mmkvwrapper.setstring(“test”,“hello”)时,可以在“test”后添加类型后缀“#s”,得到“test#s”,该test#s即为目标key。
[0072]
需要说明的是,以上仅以类型标识为类型后缀为例进行说明,在其他实现方式中,类型标识还可以是其他表现形式,只要能够表征数据类型即可,这里不再一一举例说明。
[0073]
s108:将第二接口中的key替换为目标key,并调用第二接口存储目标数据。
[0074]
在s108中,为了实现类型化存储,在得到目标key后,可以将第二接口中的key替换为目标key,然后调用第二接口存储目标数据。这样,由于调用第二接口存储的key为目标key,目标key中包含类型标识,因此,可以实现对目标数据的类型化存储。
[0075]
以上述调用第一接口mmkvwrapper.setstring存储数据类型为string、key为test、value为hello的目标数据为例,在得到目标key(即test#s)后,可以将第二接口mmkv.setstring中的key由test替换为test#s,然后调用第二接口mmkv.setstring(“test#s”,“hello”)存储目标数据。这样,由于存储的key为test#s,test#s中包含类型标识#s,因
此,可以实现类型化存储。
[0076]
本技术实施例提供的技术方案,在基于mmkv存储数据时,通过对mmkv的原生接口进行封装,然后通过封装后的接口将原生接口中的key替换为包含有类型标识的key,并调用原生接口进行数据存储,可以在不改变mmkv源码的情况下,实现对数据的类型化存储,当应用程序中的其他进程或第三方应用需要读取已存储的数据时,可以根据key中包含的类型标识调用相应的接口进行数据读取,从而可以准确读取目标数据。
[0077]
本技术实施例中,在对应用程序中的数据进行类型化存储后,当需要读取已存储的数据时,还可以根据key中包含的类型标识实现数据的准确读取。以下将以应用程序中的其他进程需要读取已存储的数据为例进行说明。
[0078]
在基于mmkv对应用数据进行类型化存储后,在获取已存储的应用数据(也可以称为mmkv数据)时,可以包括以下s110和s112:
[0079]
s110:获取基于mmkv存储的多个key。
[0080]
该多个key可以是基于上述s102至s108对应用程序中的数据进行类型化存储后得到的多个key,每个key中均包含类型标识,该类型标识可以表征与key对应的value的数据类型。
[0081]
s112:针对多个key中的第一key,根据第一key中包含的第一类型标识,调用第三接口读取与第一key对应的第一value。
[0082]
在获取到多个key后,以其中一个key(即第一key)为例,在获取第一key对应的value(即第一value)时,可以根据第一key中第一类型标识调用第三接口读取第一value。其中,第一类型标识表征第一数据类型,该第一数据类型为第一value的数据类型,第三接口为mmkv的原生接口中用于读取第一数据类型的数据的接口。
[0083]
比如,以上述s108中存储的key为test#s,value为hello为例,在获取到test#s(即第一key)后,在调用第三接口时,由于test#s中包含的类型标识为#s,且基于上述表2可知,#s对应的数据类型为string,因此,调用的第三接口为mmkv.getstring接口,mmkv.getstring接口是mmkv的原生接口中用于读取string类型的数据的接口。
[0084]
这样,由于在读取已存储的数据时,可以根据已存储的key中所包含的类型标识调用相应的mmkv原生接口进行数据读取,因此,针对其中的第一key,可以根据第一key中包含的类型标识准确调用mmkv原生接口中的第三接口进行数据读取,从而实现对数据的准确读取。
[0085]
可选地,作为一个实施例,在上述s110中,获取基于mmkv存储的多个key,具体可以包括以下s1101和s1102:
[0086]
s1101:调用第一通信接口获取目标文件,目标文件中包含基于mmkv存储的key-value数据。
[0087]
目标文件可以是用于存储mmkv数据(即基于mmkv存储的key-value数据)的文件。第一通信接口为进程间的通信接口,具体可以用于遍历指定目标下的所有文件。可选地,在操作系统为android系统的情况下,第一通信接口可以是binder接口,具体可以是getprefnames接口。
[0088]
可选地,作为一个实施例,在调用第一通信接口获取目标文件时,可以包括以下步骤:
[0089]
首先,调用第一通信接口遍历mmkv子目录下的第一文件。
[0090]
mmkv子目录可以是应用程序在私有存储目录下设置的用于存储mmkv数据的子目录。mmkv子目录下包含一个或多个第一文件,应用程序在基于mmkv存储应用数据时,可以将应用数据存储到mmkv子目录的第一文件中。这样,在调用第一通信接口获取目标文件时,可以调用第一通信接口遍历mmkv子目录下的第一文件。
[0091]
其次,在mmkv子目录中包括特殊字符目录的情况下,将特殊字符目录下的第二文件拷贝到mmkv子目录下。
[0092]
考虑到应用数据中通常包括特殊字符(specialcharacter),特殊字符通常会存储到mmkv子目录下的特殊字符目录(specialcharacter目录)的第二文件中,因此,在获取目标文件时,若mmkv子目录下包括特殊字符目录,则可以将特殊字符目录下的第二文件拷贝到mmkv目录下,这样,在调用第一通信接口遍历mmkv子目录下的第一文件时,可以同时遍历到第二文件,从而可以避免遗漏第二文件。
[0093]
最后,获取第一文件以及第二文件。
[0094]
在遍历到第一文件和第二文件后,可以获取第一文件和第二文件,并将第一文件和第二文件作为目标文件。
[0095]
为了便于理解本技术实施例中获取目标文件的具体实现方式,可以参见图2。图2是本技术的一个实施例目标文件获取方法的流程示意图。图2所示的实施例可以包括以下步骤:
[0096]
s21:调用binder接口getprefnames枚举mmkv子目录下的所有文件。
[0097]
s22:判断当前文件是否为普通文件。
[0098]
这里的普通文件指的是mmkv子目录下的第一文件,普通文件中存储的是应用程序中的非特殊字符数据。
[0099]
若当前文件是普通文件,则执行s23;否则执行s24。
[0100]
s23:将当前文件添加到文件列表。
[0101]
在将当前文件添加到文件列表后,可以执行s26。
[0102]
s24:判断当前文件的文件名是否为specialcharacter。
[0103]
判断当前文件的文件名是否为specialcharacter,也即判断当前文件的文件名是否是特殊字符目录的目录名specialcharacter。
[0104]
若是,则执行s25;若否,则返回执行s22,继续下一个文件的判断。
[0105]
s25:将specialcharacter目录下的文件拷贝到mmkv子目录下。
[0106]
可选地,在将specialcharacter目录下的文件拷贝到mmkv子目录下后,可以返回执行22(图2并未示出),此时,specialcharacter目录下的文件可以视为普通文件,或者,也可以执行s23,即直接将specialcharacter目录下的文件添加到文件列表(图2也未示出)。
[0107]
s26:判断是否遍历结束。
[0108]
若是,则执行s27;若否,则返回执行s22。
[0109]
s27:返回枚举到的所有文件。
[0110]
基于图2所示的实施例,可以获取到存储有mmkv数据的所有目标文件。
[0111]
s1102:调用第二通信接口获取目标文件中包含的多个key。
[0112]
第二通信接口也为进程间的通信接口,可以用于枚举指定文件中的所有key。可选
地,在操作系统为android系统的情况下,第二通信接口可以是binder接口,具体可以是allsharedprefentries接口。
[0113]
在调用第二通信接口获取目标文件中包含的多个key时,可以在第二通信接口中传入目标文件的文件名,第二通信接口可以根据文件名返回目标文件中包括的所有key,从而可以获取到目标文件中包含的多个key。
[0114]
需要说明的是,上述第一通信接口和第二通信接口均为进程间的通信接口,可以由操作系统的后台服务提供。本技术实施例中,为了提高应用程序不同进程之间的通信安全以及便于调用这些通信接口获取已存储的mmkv数据,应用程序在获取mmkv数据之前,可以与操作系统的后台服务(service)进行绑定,以获得使用通信接口的权限。
[0115]
具体地,以操作系统为android系统为例,应用程序可以在执行上述s110之前与操作系统的后台服务进行绑定,若绑定成功,则可以接收后台服务返回的binder对象,binder对象可以提供的binder接口。可选地,binder对象提供的binder接口可以包括以下至少一项:
[0116]
(1)遍历应用私有存储目录指定子目录,获取该子目录下所有文件的接口getprefnames(),即上述第一通信接口;
[0117]
(2)枚举指定文件所有键的接口getallkeys(string prefname);
[0118]
(3)根据参数key,获取对应的value的接口getsharedprefentry(string key,string prefname);
[0119]
(4)根据传入的文件名,返回所有键值对的接口allsharedprefentries(),即上述第二通信接口。
[0120]
这样,应用程序可以使用binder接口进行跨进程通信。具体地,可以通过上述getprefnames()接口获取目标文件,然后通过allsharedprefentries()接口获取目标文件中的多个key。
[0121]
可选地,作为一个实施例,在绑定后台服务时,应用程序可以向后台服务发送密钥和第一内容,后台服务在接收到密钥和第一内容后,可以根据密钥对后台服务中预先存储的加密内容进行解密,然后将解密结果与第一内容进行匹配。若解密结果与第一内容匹配成功(比如第一内容和解密结果相同或相似度大于或等于预设阈值),则绑定成功,此时后台服务会返回binder对象,表征授权应用程序中的其他进程调用binder接口读取已存储的mmkv数据。若解密结果与第一内容匹配失败(比如第一内容和解密结果不同或相似度低于预设阈值),则绑定失败,此时后台服务可以返回空对象(即不会向应用程序返回binder对象),或者也可以提醒应用程序绑定失败,应用程序在接收到空对象或绑定失败的提示信息后,可以重新绑定后台服务。这里仅以应用程序与后台服务绑定成功为例进行说明。
[0122]
需要说明的是,binder机制是android系统里用来进行跨进程通信的机制,两个进程可以通过binder机制进行远程接口调用和数据传递。android系统的后台服务提供了一个bindservice方法,应用程序在与后台服务进行绑定时,可以使用bindservice方法进行绑定。在与后台服务绑定成功后,后台服务可以向应用程序返回binder对象,应用程序可以通过binder对象提供的binder接口进行跨进程通信。
[0123]
为了便于理解本技术实施例中与后台服务绑定的具体实现方式,可以参见图3。图3是本技术的一个实施例绑定后台服务的方法的流程示意图。图3所示的实施例可以包括以
下步骤:
[0124]
s31:应用程序使用bindservice方法绑定后台服务,并向后台服务发送包含密钥和第一内容的绑定请求。
[0125]
s32:后台服务接收到绑定请求后,根据绑定请求中的密钥对预先存储的加密内容进行解密。
[0126]
s33:后台服务将解密结果与绑定请求中的第一内容进行匹配。
[0127]
s34:后台服务判断是否匹配成功。
[0128]
这里的匹配成功可以是解密结果和第一内容相同,或解密结果和第一内容的相似度大于或等于预设阈值。
[0129]
若匹配成功,则可以执行s35;若匹配失败,则可以执行s36。
[0130]
s35:后台服务返回binder对象。
[0131]
s36:后台服务返回空对象。
[0132]
基于图3所示的实施例,可以实现应用程序和后台服务的绑定。
[0133]
可选地,作为一个实施例,在上述s112中,在根据第一key中包含的第一类型标识,调用第三接口读取第一key对应的第一value,可以先调用对第三接口进行封装后的接口,再调用第三接口,这样,可以实现对数据的准确读取。具体地,上述s112可以包括以下步骤:
[0134]
根据第一key中的第一类型标识调用第四接口,第四接口通过对第三接口进行封装后得到;
[0135]
在第四接口的key中添加第一类型标识,得到第一key;
[0136]
将第三接口的key替换为第一key,并调用第三接口读取第一value。
[0137]
也就是说,在获取第一key对应的第一value时,需要先根据第一key中包含的第一类型标识调用封装后的第四接口,第一类型标识表征第一数据类型,第四接口用于读取数据类型为第一数据类型的数据,且第四接口中的key是不包含类型标识的,然后在第四接口的key中添加第一类型标识,得到第一key,最后将原生的第三接口中的key替换为第一key,并调用第三接口读取第一key对应的第一value,从而实现对数据的准确读取。
[0138]
比如,以上述s108中存储的key为test#s,value为hello为例,在获取到test#s(即第一key)后,在调用第四接口时,由于test#s中包含的类型标识为#s,且基于上述表2可知,#s对应的数据类型为string,因此,可以调用接口mmkvwrapper.getstring(“test”),mmkvwrapper.getstring(“test”)接口用于读取与test对应的数据类型为string的value。其中,第四接口中的key是不包含类型标识的test,在调用第四接口后,可以在第四接口的test中添加类型标识,即添加#s,得到第一key,即得到test#s,然后将第三接口mmkv.getstring中的key替换为test#s,并调用mmkv.getstring(“test#s”)读取与test#s对应的value,即读取hello。
[0139]
为了便于理解本技术实施例中提供的获取已存储的mmkv数据的具体实现方式,可以参见图4。图4是本技术的一个实施例数据获取方法的流程示意图。图4所示的实施例可以包括以下步骤:
[0140]
s41:使用接口allsharedprefentries()获取目标文件下的所有key。
[0141]
s42:使用getsharedprefentry传入key。
[0142]
s43:判断key的类型后缀。
architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0157]
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
[0158]
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据处理装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
[0159]
获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
[0160]
根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
[0161]
在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
[0162]
将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
[0163]
上述如本技术图5所示实施例揭示的数据处理装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
[0164]
该电子设备还可执行图1的方法,并实现数据处理装置在图1所示实施例中的功能,本技术实施例在此不再赘述。
[0165]
当然,除了软件实现方式之外,本技术的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0166]
本技术实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下操作:
[0167]
获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
[0168]
根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
[0169]
在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
[0170]
将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
[0171]
图6是本技术的一个实施例数据处理装置60的结构示意图。请参考图6,在一种软件实施方式中,所述数据处理装置60可包括:获取模块61、第一存储模块62、添加模块63和第二存储模块64,其中:
[0172]
获取模块61,获取待基于mmkv存储的目标数据,所述mmkv通过key-value的方式进行数据存储;
[0173]
第一存储模块62,根据所述目标数据的数据类型调用第一接口,所述第一接口通过对第二接口进行封装后得到,所述第二接口为所述mmkv的原生接口中用于存储所述目标数据的接口;
[0174]
添加模块63,在所述第一接口的key中添加所述数据类型的类型标识,得到目标key;
[0175]
第二存储模块64,将所述第二接口中的key替换为所述目标key,并调用所述第二接口存储所述目标数据。
[0176]
可选地,作为一个实施例,所述数据处理装置60还包括数据读取模块65,所述数据读取模块65:
[0177]
获取基于所述mmkv存储的多个key,所述多个key的每个key中均包含类型标识;
[0178]
针对所述多个key中的第一key,根据所述第一key中包含的第一类型标识,调用第三接口读取与所述第一key对应的第一value,所述第一类型标识表征第一数据类型,所述第三接口为所述mmkv的原生接口中用于读取所述第一数据类型的数据的接口。
[0179]
可选地,作为一个实施例,所述数据读取接口65获取基于所述mmkv存储的多个key,包括:
[0180]
调用第一通信接口获取目标文件,所述目标文件中包含基于所述mmkv存储的key-value数据;
[0181]
调用第二通信接口获取所述目标文件中包含的多个key;
[0182]
其中,所述第一通信接口和所述第二通信接口均为binder接口,所述第一通信接口用于遍历指定目录下的所有文件,所述第二通信接口用于枚举指定文件中的所有key。
[0183]
可选地,作为一个实施例,所述数据读取接口65在获取基于所述mmkv存储的多个key之前,与操作系统的后台服务进行绑定;
[0184]
在与所述后台服务绑定成功的情况下,接收所述后台服务返回的binder对象,所述binder对象提供所述binder接口。
[0185]
可选地,作为一个实施例,所述数据读取接口65与操作系统的后台服务进行绑定,包括:
[0186]
向所述后台服务发送密钥和第一内容,由所述后台服务根据所述密钥对预先存储的加密内容进行解密;
[0187]
在所述后台服务的解密结果与所述第一内容匹配成功的情况下,接收所述后台服务返回的binder对象;
[0188]
在所述后台服务的解密结果与所述第一内容匹配失败的情况下,接收所述后台服
务返回的空对象。
[0189]
可选地,作为一个实施例,所述数据读取接口65调用第一通信接口获取目标文件,包括:
[0190]
调用所述第一通信接口遍历mmkv子目录下的第一文件;
[0191]
在所述mmkv子目录中包括特殊字符目录的情况下,将所述特殊字符目录下的第二文件拷贝到所述mmkv子目录下;
[0192]
获取所述第一文件以及所述第二文件。
[0193]
可选地,作为一个实施例,所述数据读取接口65根据所述第一key中的第一类型标识,调用第三接口读取与所述第一key对应的第一value,包括:
[0194]
根据所述第一key中的第一类型标识调用第四接口,所述第四接口通过对所述第三接口进行封装后得到;
[0195]
在所述第四接口的key中添加所述第一类型标识,得到所述第一key;
[0196]
将所述第三接口的key替换为所述第一key,并调用所述第三接口读取所述第一value。
[0197]
本技术实施例提供的数据处理装置60还可执行图1的方法,并实现数据处理装置在图1所示实施例的功能,本技术实施例在此不再赘述。
[0198]
总之,以上所述仅为本技术的较佳实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
[0199]
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
[0200]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0201]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0202]
本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施
例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
再多了解一些

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

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

相关文献