本发明涉及数据处理技术领域,特别涉及一种数据存储方法及装置。
背景技术:
目前,相关技术中设备在存储数值时,都是按照其数据类型对应的字节个数进行存储的,例如,当某数值为float型数值时,就将该数值按照4个字节进行存储,当某数值为double型数值时,就将该数值按照8个字节进行存储,但很多时候,该数值其实并不需要占用那么多字节个数,因而,相关技术中的这种数据存储方式无疑浪费过多存储空间,尤其是当设备上存储了大量数值时,对设备存储空间的浪费将尤其明显,但相关技术却没有相应的解决方案。
技术实现要素:
本发明提供一种数据存储方法及装置,用以在接收到第一数据类型的第一目标数值时,可获取所述第一目标数值对应的十进制数值,进而将所述十进制数值顺序拆分为n个数值,以便于采用n个字节的数组存储所述n个数值,从而通过数值拆分的方式变化第一目标数值的存储方式,以减少对存储空间的占用,避免直接使用第一数据类型对应的字节个数存储该第一目标数值而导致浪费过多存储空间。
本发明提供一种数据存储方法,包括:
接收目标设备发送的第一数据类型的第一目标数值;
获取所述第一目标数值对应的十进制数值;
将所述十进制数值顺序拆分为n个数值,其中,所述n个数值中每个数值均占用一个字节;
采用n个字节的数组存储所述n个数值。
在一个实施例中,所述将所述十进制数值顺序拆分为n个数值,包括:
从所述十进制数值的尾部开始,将每相邻两位数进行一次拆分,以获得n个数值,其中,拆分后的所述n个数值中各位数的排序和所述十进制数值中各位数的排序相同。
在一个实施例中,所述将所述十进制数值顺序拆分为n个数值,包括:
判断所述十进制数值的长度是否不大于所述第一数据类型的字节个数的两倍;
若不大于所述第一数据类型的字节个数的两倍,则将所述十进制数值顺序拆分为n个数值。
在一个实施例中,所述方法还包括:
在基于所述n个字节的数组中的n个数值进行计算时,根据所述n个数值获得其对应的所述十进制数值;
将所述十进制数值转换为第二数据类型的第二目标数值;
基于所述第二目标数值进行计算。
在一个实施例中,所述第一数据类型和所述第二数据类型包括以下至少一项:double类型、int类型。
在一个实施例中,所述第一目标数值包括以下至少一项:
当前定位信息的经度、当前定位信息的纬度、当前定位信息的时间。
本发明还提供一种数据存储装置,包括:
接收模块,用于接收目标设备发送的第一数据类型的第一目标数值;
第一获取模块,用于获取所述第一目标数值对应的十进制数值;
拆分模块,用于将所述十进制数值顺序拆分为n个数值,其中,所述n个数值中每个数值均占用一个字节;
存储模块,用于采用n个字节的数组存储所述n个数值。
在一个实施例中,所述拆分模块包括:
第一拆分子模块,用于从所述十进制数值的尾部开始,将每相邻两位数进行一次拆分,以获得n个数值,其中,拆分后的所述n个数值中各位数的排序和所述十进制数值中各位数的排序相同。
在一个实施例中,所述拆分模块包括:
判断子模块,用于判断所述十进制数值的长度是否不大于所述第一数据类型的字节个数的两倍;
第二拆分子模块,用于若不大于所述第一数据类型的字节个数的两倍,则将所述十进制数值顺序拆分为n个数值。
在一个实施例中,所述装置还包括:
第二获取模块,用于在基于所述n个字节的数组中的n个数值进行计算时,根据所述n个数值获得其对应的所述十进制数值;
转换模块,用于将所述十进制数值转换为第二数据类型的第二目标数值;
计算模块,用于基于所述第二目标数值进行计算。
本公开的实施例提供的技术方案可以包括以下有益效果:
在接收到第一数据类型的第一目标数值时,可获取第一目标数值对应的十进制数值,进而将十进制数值顺序拆分为n个数值,以便于采用n个字节的数组存储这n个数值,从而通过数值拆分的方式变化第一目标数值的存储方式,以减少对存储空间的占用,避免直接使用第一数据类型对应的字节个数存储该第一目标数值而导致浪费过多存储空间。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是根据一示例性实施例示出的一种数据存储方法的流程图。
图2是根据一示例性实施例示出的另一种数据存储方法的流程图。
图3是根据一示例性实施例示出的又一种数据存储方法的流程图。
图4是根据一示例性实施例示出的一种数据存储装置的框图。
图5是根据一示例性实施例示出的另一种数据存储装置的框图。
图6是根据一示例性实施例示出的又一种数据存储装置的框图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
为了解决上述技术问题,本公开实施例提供了一种数据存储方法,该方法适用于数据存储程序、系统或装置中,其执行主体可以是手机等终端、或者是服务器,如图1所示,该方法包括步骤s101至步骤s104,其中,
在步骤s101中,接收目标设备发送的第一数据类型的第一目标数值;
目标设备可以是任一设备。
在步骤s102中,获取第一目标数值对应的十进制数值;
在步骤s103中,将十进制数值顺序拆分为n个数值,其中,n个数值中每个数值均占用一个字节;
在步骤s104中,采用n个字节的数组存储n个数值,当然,在存储这n个数值时,设备也会将这n个数值分别转化为二进制后再进行存储,此处不再赘述。
在接收到第一数据类型的第一目标数值时,可获取第一目标数值对应的十进制数值,进而将十进制数值顺序拆分为n个数值,以便于采用n个字节的数组存储这n个数值,从而通过数值拆分的方式变化第一目标数值的存储方式,以减少对存储空间的占用,避免直接使用第一数据类型对应的字节个数存储该第一目标数值而导致浪费过多存储空间。
例如:当第一数据类型为doule、占用8个字节,第一目标数值为当前定位信息的经度、且对应的十进制数值为120.238945时,可将其顺序拆分为1/20/23/89/45(这5个数值),其中,1、20、23、89、45均占用一个字节,因而可采用5个字节存储这5个数值,而这5个字节就构成了一个数组,该数组表示的二进制数就代表了上述第一目标数值,从而将该经度所占用的字节由8个字节降低为5个字节,进而减少了对存储空间的占用;
当然,如果是doule型的纬度,由于纬度对应的十进制最大值为90,因而,该纬度可采用4个字节存储即可,从而将该纬度所占用的字节由8个字节降低为4个字节,进而减少了对存储空间的占用。
另外,通过数值拆分的方式变化第一目标数值的存储方式相当于更改了第一目标数值的数据类型,因而,通过本发明的存储方式也相当于对第一目标数值进行了加密,可以增强第一目标数值的安全性。
最后,在将该第一目标数值发送至其他设备时,由于可发送最后存储的n个数值,而这n个数值的字节长度小于第一数据类型的字节个数,因而,本发明的这种存储方式还可以减少发送过程中对带宽的占用。
在一个实施例中,上述图1所示的步骤s103,即将十进制数值顺序拆分为n个数值,可被执行为:
从十进制数值的尾部开始,将每相邻两位数进行一次拆分,以获得n个数值,其中,拆分后的n个数值中各位数的排序和十进制数值中各位数的排序相同。
由于转换后的十进制数值的位数可能为奇数,因而,在拆分时,可从十进制数值的尾部开始,将每相邻两位数进行一次拆分,以获得n个数值,如将120.238945从后往前每两位进行一次拆分,即获得了1、20、23、89、45这5个数值,而拆分后的5个数值中各位数的排序和十进制数值中各位数的原始排序应该相同,从而避免该十进制数值被更改。
如图2所示,在一个实施例中,上述图1所示的步骤s103,即将十进制数值顺序拆分为n个数值,可以包括步骤s201和步骤s202:
在步骤s201中,判断十进制数值的长度是否不大于第一数据类型的字节个数的两倍;
在步骤s202中,若不大于第一数据类型的字节个数的两倍,则将十进制数值顺序拆分为n个数值。
由于可能并不是所有的第一数据类型的数值按拆分后的存储方式存储后均会减少对空间的占用,因而,在将十进制数值顺序拆分为n个数值时,可判断十进制数值的长度是否不大于第一数据类型的字节个数的两倍,若不大于该第一数据类型的字节个数的两倍,则说明十进制数值中每两个十进制位能够对应一个字节,刚好符合每相邻两位数进行一次拆分的规则,因而此时如果进行顺序拆分,拆分后需要占用的最大字节数目为上述第一数据类型的字节个数,具备了拆分后所占用的字节数目能够减少的可能性,因而,可将上述十进制数值顺序拆分为n个数值。
当然,在本发明中只需考虑十进制数值的长度是否不大于上述第一数据类型的字节个数的两倍,并不需要对该十进制数值的正负进行限制,所以,上述十进制数值可以为正数也可以为负数,也可以为零。
如图3所示,在一个实施例中,方法还可包括步骤s301至步骤s303:
在步骤s301中,在基于n个字节的数组中的n个数值进行计算时,根据n个数值获得其对应的十进制数值;
在步骤s302中,将十进制数值转换为第二数据类型的第二目标数值;
其中,该第二数据类型可以是相关技术中任一个计算时需要使用的标准的数据类型。
在步骤s303中,基于第二目标数值进行计算。
由于上述n个数值并不是相关技术中某标准的数据类型,无法直接用于计算,因而,在基于上述n个字节的数组中的n个数值进行计算时,可反向获得这n个数值对应的十进制数值,进而将该十进制数值转换为第二数据类型的第二目标数值,并基于第二目标数值进行计算。
在一个实施例中,第一数据类型和第二数据类型包括以下至少一项:double类型、int类型。
第一数据类型和第二数据类型包括但不限于上述类型,例如,还可以包括float、longlong等相关技术中使用的标准的数据类型。
在一个实施例中,第一目标数值包括以下至少一项:
当前定位信息的经度、当前定位信息的纬度、当前定位信息的时间。
第一目标数值包括但不限于当前定位信息的经度、当前定位信息的纬度、当前定位信息的时间,还可以是任一有取值范围限制的数值。
另外,当第一目标数值包括当前定位信息的经度、当前定位信息的纬度和当前定位信息的时间时,如果再次接收到目标设备发送的定位信息,且再次接收到的定位信息中的经度和纬度都没有变化,则可不用采用本发明的存储方式再次存储本次的经度和纬度,只需要存储/修改本次的定位信息的时间即可,从而进一步减少对存储空间的占用。
如图4所示,本发明还提供一种数据存储装置,包括:
接收模块401,被配置为接收目标设备发送的第一数据类型的第一目标数值;
第一获取模块402,被配置为获取第一目标数值对应的十进制数值;
拆分模块403,被配置为将十进制数值顺序拆分为n个数值,其中,n个数值中每个数值均占用一个字节;
存储模块404,被配置为采用n个字节的数组存储n个数值。
在一个实施例中,拆分模块403可以包括:
第一拆分子模块,被配置为从十进制数值的尾部开始,将每相邻两位数进行一次拆分,以获得n个数值,其中,拆分后的n个数值中各位数的排序和十进制数值中各位数的排序相同。
如图5所示,在一个实施例中,拆分模块403可以包括:
判断子模块4031,被配置为判断十进制数值的长度是否不大于第一数据类型的字节个数的两倍;
第二拆分子模块4032,被配置为若不大于第一数据类型的字节个数的两倍,则将十进制数值顺序拆分为n个数值。
如图6所示,在一个实施例中,装置还包括:
第二获取模块601,被配置为在基于n个字节的数组中的n个数值进行计算时,根据n个数值获得其对应的十进制数值;
转换模块602,被配置为将十进制数值转换为第二数据类型的第二目标数值;
计算模块603,被配置为基于第二目标数值进行计算。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
最后,本发明中的数据存储装置适用于终端设备。例如,可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。