一种优化的文件存储方法、存储介质、设备及系统与流程

文档序号:17288253发布日期:2019-04-03 03:44阅读:162来源:国知局
一种优化的文件存储方法、存储介质、设备及系统与流程

本发明涉及互联网移动端应用开发领域,具体涉及一种优化的文件存储方法、存储介质、设备及系统。



背景技术:

随着通信技术的发展,智能手机等移动设备也得到广泛的应用,移动设备中的应用程序在运行的过程中,经常需要进行数据存储,且数据存储在本地。

通常,数据存储在系统数据库中,系统数据库是一个属性列表,属性列表提供存储有关的偏好设置,偏好设置实际上是基于文件的操作,从而将数据存储到文件中,每次读写文件都有一个文件的读和写操作,而文件的读写过程中是比较消耗性能的,例如一个300kb的文件,10次读取需要50ms,且读取的过程在主线程中进行对硬件的性能消耗也极大。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种优化的文件存储方法、存储介质、设备及系统,可以有效提升数据存储时的写入速度。

本发明第一方面提供一种优化的文件存储方法,包括以下步骤:

使用函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

待存储数据拼接至内存中,基于内存和文件间的映射,拼接至内存中的待存储数据写入文件中。

结合第一方面,在第一种可能的实现方式中,

所述沙盒文件的路径为数组;

所述拼接的路径为创建的文件的地址。

结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述基于获取的路径,在沙盒文件中拼接一个路径,具体包括:

s201:获取路径的数组的第一个元素;

s202:判断所述第一个元素的长度是否大于0,当且仅当第一个元素的长度大于0时,在沙盒文件中拼接一个路径。

结合第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述建立内存和所述文件间的映射,具体步骤为:

s301:基于文件的地址,使用open函数打开文件,得到文件打开结果,所述文件打开结果为fd形式的字段;

s302:当文件打开结果的字段大于0时,设置一变量size,所述变量size的大小为一页内存的大小;

s303:将文件打开结果的字段和变量size传给mmap函数,完成内存和文件间映射的建立。

结合第一方面,在第四种可能的实现方式中,当建立内存和所述文件间的映射之后,还包括对文件添加保护操作,所述对文件添加保护操作具体为:使用nsfilemanager函数调用defaultmanager函数,得到文件管理器,然后将文件存储于文件管理器中。

结合第一方面,在第五种可能的实现方式中,在待存储数据拼接至内存中之前,还包括:

s411:对待存储数据进行二进制转化得到数据nsdata;

s412:对数据nsdata添加锁lock后保存;

s413:将保存的数据nsdata添加到字典dic中。

结合第一方面,在第六种可能的实现方式中,所述待存储数据拼接至内存中,具体步骤为:

s421:使用函数lengthofbytesusingencoding计算字典dic的key的长度;

s422:计算key占用的字节数,计算数据nsdata占用的字节数;

s423:当内存剩余空间大于key占用的字节数和数据nsdata占用的字节数之和时,将数据nsdata拼接至内存中。

本发明第二方面提供一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

使用函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

待存储数据拼接至内存中,基于内存和文件间的映射,拼接至内存中的待存储数据写入文件中。

本发明第三方面提供一种电子设备,所述电子设备包括:

获取单元,用于基于函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

拼接单元,其用于基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

映射建立单元,其用于在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

写入单元,其用于将待存储数据拼接至内存中,然后基于内存和文件间的映射,将拼接至内存中的待存储数据写入文件中。

本发明第四方面提供一种优化的文件存储系统,包括:

获取模块,用于基于函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

拼接模块,其用于基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

映射建立模块,其用于在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

写入模块,其用于将待存储数据拼接至内存中,然后基于内存和文件间的映射,将拼接至内存中的待存储数据写入文件中。

结合第四方面,在第一种可能的实现方式中,

所述沙盒文件的路径为数组;

所述拼接的路径为创建的文件的地址。

结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述基于获取的路径,在沙盒文件中拼接一个路径,具体包括:

s201:获取路径的数组的第一个元素;

s202:判断所述第一个元素的长度是否大于0,当且仅当第一个元素的长度大于0时,在沙盒文件中拼接一个路径。

结合第四方面的第一种可能的实现方式,在第三种可能的实现方式中,所述建立内存和所述文件间的映射,具体步骤为:

s301:基于文件的地址,使用open函数打开文件,得到文件打开结果,所述文件打开结果为fd形式的字段;

s302:当文件打开结果的字段大于0时,设置一变量size,所述变量size的大小为一页内存的大小;

s303:将文件打开结果的字段和变量size传给mmap函数,完成内存和文件间映射的建立。

结合第四方面,在第四种可能的实现方式中,当建立内存和所述文件间的映射之后,还包括对文件添加保护操作,所述对文件添加保护操作具体为:使用nsfilemanager函数调用defaultmanager函数,得到文件管理器,然后将文件存储于文件管理器中。

与现有技术相比,本发明的优点在于:获取沙盒文件的路径,然后基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径,并在拼接的路径处创建文件,由于沙盒文件属于磁盘,故创建的文件也属于磁盘,在进行数据存储时,直接操纵内存,将数据存入内存中,后续再根据内存和磁盘间的映射关系,将数据写入磁盘中,由于进行数据存储时直接将数据存入内存中,内存的读写速度是远大于磁盘的,从而可以有效提升数据存储时的写入速度。

附图说明

图1为本发明实施例中一种优化的文件存储方法的流程图;

图2为本发明实施例中一种电子设备的结构示意图。

具体实施方式

本发明实施例提供了一种优化的文件存储方法,适用于ios操作系统,将内存和磁盘建立映射关系,在存储数据时,直接操纵内存,将数据存入内存中,后续再根据内存和磁盘间的映射关系,将数据写入磁盘中,由于操作的是内存,从而可以有效提升数据存储时的写入速度。本发明实施例还提供了相应的存储介质、设备和优化的文件存储系统。

以下结合附本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参见图1所示,本发明实施例提供的一种优化的文件存储方法的一实施例包括:

s1:使用函数nssearchpathfordirectoriesindomains获取沙盒文件的路径。

本发明实施例中,函数nssearchpathfordirectoriesindomains为ios系统中用于查找目录的函数,同时返回指定范围内的指定名称的目录的路径集合。沙盒文件机制是ios系统中的一种安全体系,每个ios程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒,应用必须待在自己的沙盒里,其他应用不能访问该沙盒,所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。

由于每个应用程序只能访问自己的沙盒文件,故本发明实施例的优化的文件存储方法是针对单个应用程序而言,实现单个应用程序运行过程中,数据存储的优化,例如对应用程序a进行数据存储的优化,则本步骤中获取的路径为应用程序a对应沙盒文件的路径。

s2:基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径。即通过获取的路径访问沙盒文件,然后在沙盒文件中拼接出一个路径,即在沙盒文件中指定一处位置,拼接的路径即为后续创建的文件的地址。

s3:在拼接的路径中创建一文件,并建立内存和所述文件间的映射。

本发明实施例中,在拼接的路径中创建文件,为在上述沙盒文件中指定的位置处创建文件,创建的文件地址即为上述拼接的路径。

本发明实施例中,通过建立内存和文件之间的映射关系,使得后续在进行数据存储时,直接先将数据存储于内存中,然后后续设备在空闲时,再基于内存和文件之间的映射关系,将预先存储于内存中的数据存储到文件中,沙盒文件位于磁盘中,文件在沙盒文件中拼接的路径处创建,故创建的文件位于磁盘中,存储于内存中的数据存储到文件中,即将数据存储于磁盘中。

s4:待存储数据拼接至内存中,基于内存和文件间的映射,拼接至内存中的待存储数据写入文件中。拼接至内存中的待存储数据可以在ios设备空闲或达到定时时间后,写入到文件中。

本发明实施例的优化的文件存储方法,获取沙盒文件的路径,然后基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径,并在拼接的路径处创建文件,由于沙盒文件属于磁盘,故创建的文件也属于磁盘,在进行数据存储时,直接操纵内存,将数据存入内存中,后续再根据内存和磁盘间的映射关系,将数据写入磁盘中,由于进行数据存储时直接将数据存入内存中,内存的读写速度是远大于磁盘的,从而可以有效提升数据存储时的写入速度。

可选地,在上述图1对应的实施例的基础上,本发明实施例提供的一种优化的文件存储方法的第一个可选实施例中,基于获取的路径,在沙盒文件中拼接一个路径,具体包括:

s201:获取路径的数组的第一个元素;沙盒文件的路径为数组。获取沙盒文件的路径paths后,即为拿到一个数组,数组的第一个元素为firstpath,paths用于表示文件的路径。

s202:判断所述第一个元素的长度是否大于0,当且仅当第一个元素的长度大于0时,在沙盒文件中拼接一个路径。例如拼接的路径为/user/save.a,则/user/save.a也为后续在该路径处创建的文件的地址。

可选地,在上述一种优化的文件存储方法的第一个可选实施例的基础上,本发明实施例提供的一种优化的文件存储方法的第二个可选实施例中,建立内存和所述文件间的映射,具体步骤为:

s301:基于文件的地址,使用open函数打开文件,得到文件打开结果,所述文件打开结果为fd形式的字段;

s302:当文件打开结果的字段大于0时,设置一变量size,所述变量size的大小为一页内存的大小;变量size的大小为1024的倍数。

s303:将文件打开结果的字段和变量size传给mmap函数,完成内存和文件间映射的建立。mmap函数用于将一个文件或者其它对象映射进内存。通过mmap函数,本步骤中将文件和内存间建立映射关系。实现内存和文件间的映射后,若映射成功则可以得到内存中的指针point,当指针point中含有值时,则说明内存和文件间映射成功。

可选地,在上述图1对应的实施例的基础上,本发明实施例提供的一种优化的文件存储方法的第三个可选实施例中,当建立内存和所述文件间的映射之后,还包括对文件添加保护操作,对文件添加保护操作具体为:使用nsfilemanager函数调用defaultmanager函数,得到文件管理器,然后将文件存储于文件管理器中。nsfilemanager是ios系统中的文件管理类。defaultmanager代表默认管理器。

可选地,在上述图1对应的实施例的基础上,本发明实施例提供的一种优化的文件存储方法的第四个可选实施例中,在待存储数据拼接至内存中之前,还包括:

s411:对待存储数据进行二进制转化得到数据nsdata;

s412:对数据nsdata添加锁lock后保存;

s413:将保存的数据nsdata添加到字典dic中。字典由key-value组成(即键-值),数据nsdata作为字典的value,然后相应的会生成key。

待存储数据拼接至内存中,具体步骤为:

s421:使用函数lengthofbytesusingencoding计算字典dic的key的长度;函数lengthofbytesusingencoding用于根据给定的编码返回字符串的字节数,故可以通过函数lengthofbytesusingencoding进行字典key的长度的计算。

s422:计算key占用的字节数,计算数据nsdata占用的字节数;

s423:当内存剩余空间大于key占用的字节数和数据nsdata占用的字节数之和时,将数据nsdata拼接至内存中。当内存剩余空间大于key占用的字节数和数据nsdata占用的字节数之和时,说明内存中有足够的空间来装载待存储数据。

上述将数据nsdata传递到字典中,传递到字典的数据再进行编码,编码之后便可判断数据的长度,判断数据能否写到内存中,数据nsdata写入内存的过程如下:

先对参数,即对数据长度进行校验所述校验是对参数进行判空,拿到内存当前空间的总长度,减去当前占用的位置,得到还剩余的空间值,如果剩余的空间值大于待写入的数据长度,则说明空间够,边可进行写入操作,写入是通过memcpy函数,将当前的字节拷贝到内存中,拷贝到内存中需要3个参数,分别为:参数1,内存的起始地址加上当前存储的位置,得到一个开始写入内存中的起始位置;参数2,写入的字节数加上一个偏移值参数;3:,写入到内存中的文件的长度。memcpy函数为内存拷贝函数。

本发明实施例提供的一种存储介质的一实施例包括:该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

使用函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

待存储数据拼接至内存中,基于内存和文件间的映射,拼接至内存中的待存储数据写入文件中。

可选地,在上述存储介质实施例的基础上,本发明实施例提供的一种存储介质的第一个可选实施例中,存储介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可选地,在上述存储介质的实施例及第一个可选实施例的基础上,本发明实施例提供的一种存储介质的第二个可选实施例中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。

可选地,在上述存储介质的实施例及第一、第二个可选实施例的基础上,本发明实施例提供的一种存储介质的第三个可选实施例中,可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

参见图2所示,本发明实施例提供的一种电子设备的一实施例包括:

获取单元,用于基于函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

拼接单元,其用于基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

映射建立单元,其用于在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

写入单元,其用于将待存储数据拼接至内存中,然后基于内存和文件间的映射,将拼接至内存中的待存储数据写入文件中。

可选地,在上述图2对应的实施例的基础上,本发明实施例提供的一种电子设备的第一个可选实施例中,基于获取的路径,在沙盒文件中拼接一个路径,具体包括:

s201:获取路径的数组的第一个元素;沙盒文件的路径为数组。获取沙盒文件的路径paths后,即为拿到一个数组,数组的第一个元素为firstpath,paths用于表示文件的路径。

s202:判断所述第一个元素的长度是否大于0,当且仅当第一个元素的长度大于0时,在沙盒文件中拼接一个路径。例如拼接的路径为/user/save.a,则/user/save.a也为后续在该路径处创建的文件的地址。

可选地,在上述一种电子设备的第一个可选实施例的基础上,本发明实施例提供的一种电子设备的第二个可选实施例中,建立内存和所述文件间的映射,具体步骤为:

s301:基于文件的地址,使用open函数打开文件,得到文件打开结果,所述文件打开结果为fd形式的字段;

s302:当文件打开结果的字段大于0时,设置一变量size,所述变量size的大小为一页内存的大小;变量size的大小为1024的倍数。

s303:将文件打开结果的字段和变量size传给mmap函数,完成内存和文件间映射的建立。

本发明实施例提供的一种优化的文件存储系统的一实施例包括:

获取模块,用于基于函数nssearchpathfordirectoriesindomains获取沙盒文件的路径;

拼接模块,其用于基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径;

映射建立模块,其用于在拼接的路径中创建一文件,并建立内存和所述文件间的映射;

写入模块,其用于将待存储数据拼接至内存中,然后基于内存和文件间的映射,将拼接至内存中的待存储数据写入文件中。

可选地,在上述一种优化的文件存储系统对应的实施例的基础上,本发明实施例提供的一种优化的文件存储系统的第一个可选实施例中,当建立内存和所述文件间的映射之后,还包括对文件添加保护操作,对文件添加保护操作具体为:使用nsfilemanager函数调用defaultmanager函数,得到文件管理器,然后将文件存储于文件管理器中。nsfilemanager是ios系统中的文件管理类。defaultmanager代表默认管理器。

可选地,在上述一种优化的文件存储系统对应的实施例的基础上,本发明实施例提供的一种优化的文件存储系统的第二个可选实施例中,在待存储数据拼接至内存中之前,还包括:

s411:对待存储数据进行二进制转化得到数据nsdata;

s412:对数据nsdata添加锁lock后保存;

s413:将保存的数据nsdata添加到字典dic中。字典由key-value组成(即键-值),数据nsdata作为字典的value,然后相应的会生成key。

本发明实施例的优化的文件存储系统,获取沙盒文件的路径,然后基于获取的路径访问沙盒文件,在沙盒文件中拼接一个路径,并在拼接的路径处创建文件,由于沙盒文件属于磁盘,故创建的文件也属于磁盘,在进行数据存储时,直接操纵内存,将数据存入内存中,后续再根据内存和磁盘间的映射关系,将数据写入磁盘中,由于进行数据存储时直接将数据存入内存中,内存的读写速度是远大于磁盘的,从而可以有效提升数据存储时的写入速度。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1