发明内容
考虑到相关技术中存在的无法在存储卡上有效地存储长短消息的问题而做出本发明,为此,本发明的主要目的在于提供一种长短消息的存储方法、存储管理装置以及存储***,以解决相关技术中的上述问题。
根据本发明的一个方面,提供了一种长短消息的存储方法,用于存储包括多个协议数据单元即PDU的长短消息。
根据本发明的长短消息的存储方法包括:接收上层发送的长短消息的多个PDU;在存储器的多个存储单元中依次存储多个PDU,通过记录当前PDU的下一PDU的存储位置来建立PDU与存储单元间的对应关系;记录多个PDU中的第一个PDU的存储单元标识,并向上层返回第一个PDU的存储单元标识。
优选地,通过记录当前PDU的下一PDU的存储位置来来建立PDU与存储单元间的对应关系包括:调用预先建立的存储单元标识索引关系表;对于前N-1个存储单元,将当前存储单元的存储单元标识对应的索引设置为:当前存储单元中存储的当前PDU的下一PDU所在的存储单元标识;对于第N个存储单元,将当前存储单元的存储单元标识对应的索引设置为:当前存储单元的存储单元标识;其中,N表示多个PDU的数量,且为大于1的整数。
优选地,在索引关系表中,将空闲存储单元对应的存储单元标识对应的索引设置为空闲标志。
优选地,在存储器的多个存储单元中依次存储多个PDU的操作具体包括:在存储器中查找空闲存储单元,存储第一个PDU,在查找不到空闲存储单元的情况下,返回失败;在存储了第一个PDU之后,继续查找空闲存储单元用于存储其余PDU,在查找不到空闲存储单元的情况下,返回失败,并将索引关系表还原到存储第一个PDU之前的状态。
优选地,在存储器的多个存储单元中依次存储多个PDU的操作还可以包括:在上层指定的存储单元存储第一个PDU;在存储了第一个PDU之后,继续查找空闲存储单元用于存储其余PDU,在查找不到空闲存储单元的情况下,返回失败,并将索引关系表还原到存储第一个PDU之前的状况。
优选地,方法还可以包括:根据上层提供的第一个PDU的存储单元标识,从存储单元标识对应的第一存储单元中读取第一个PDU,并获取第一存储单元的第一存储单元标识;读取存储单元标识索引关系表,查找第一存储单元标识对应的索引,从索引对应的第二存储单元中读取第二个PDU;继续遍历存储单元标识索引关系表,直到读取所有PDU;缓存并返回读取到的所有PDU。
根据本发明的另一方面,提供了一种存储管理装置,用于管理对包括多个PDU的长短消息的存储,具有面向存储器的单PDU接口和面向上层的多PDU接口。
根据本发明的存储管理装置还包括:接收模块,用于接收来自上层的长短消息的多个PDU和/或指令;存储管理模块,连接至接收模块,用于在存储器的多个存储单元中依次存储接收模块接收到的多个PDU;对应关系维护模块,连接至存储管理模块,用于根据存储管理模块的存储操作,通过记录当前PDU的下一PDU的存储位置来建立PDU与存储单元间的对应关系;记录模块,连接至存储管理模块,用于记录多个PDU中第一个PDU的存储单元标识;反馈模块,连接至记录模块,用于将记录模块记录的第一个PDU的存储单元标识返回给上层。
优选地,对应关系维护模块可以包括:建立模块,用于建立存储单元标识索引关系表;判断模块,用于判断当前PDU是否是最后一个PDU;设置模块,用于根据存储管理模块的存储操作以及判断模块的判断结果对存储单元标识索引关系表进行设置。
优选地,设置模块可用于对于前N-1个存储单元,将当前存储单元的存储单元标识对应的索引设置为:当前存储单元中存储的PDU的下一PDU所在的存储单元标识;以及用于对于第N个存储单元,将当前存储单元的存储单元标识对应的索引设置为:当前存储单元的存储单元标识;其中,N表示多个PDU的数量,且为大于1的整数。
优选地,存储管理模块可以包括:查找子模块,用于在存储器中查找空闲存储单元;管理子模块,连接至查找子模块和接收模块,用于在查找子模块查找到的多个空闲存储单元中存储多个PDU,或者用于在根据接收模块接收到的指令中指定的存储单元中存储第一个PDU,在查找子模块查找到的N-1个空闲存储单元中存储其余的N-1个PDU,其中,N表示多个PDU的数量,且为大于1的整数;反馈模块还用于在查找子模块查找不到空闲存储单元的情况下,返回失败信息;设置模块还用于在查找子模块查找不到空闲存储单元的情况下,将索引关系表还原到存储所述第一个PDU之前的状况。
优选地,该存储管理装置还可以包括:读取模块,连接至接收模块和对应关系模块,用于根据接收模块接收到的指令和对应关系模块中的索引关系表从存储器中读取多个PDU,其中,指令中携带有第一个PDU的存储单元标识;缓存模块,连接至读取模块,用于将读取模块读取的多个PDU进行缓存。优选地,反馈模块还可以用于将缓存模块缓存的多个PDU返回给上层。
根据本发明的另一个方面,提供了一种存储***。
根据本发明存储***包括:存储管理装置,具有面向存储器的单协议数据单元即PDU接口和面向上层的多PDU接口,用于管理对包括多个协议数据单元即PDU的长短消息在存储器中的存储,包括:接收模块,用于接收来自上层的长短消息的多个PDU和/或指令;存储管理模块,连接至接收模块,用于在存储器的多个存储单元中依次存储接收模块接收到的多个PDU;对应关系维护模块,连接至存储管理模块,用于根据存储管理模块的存储操作,通过记录当前PDU的下一PDU的存储位置来建立PDU与存储单元间的对应关系;记录模块,连接至存储管理模块,用于记录多个PDU中第一个PDU的存储单元标识;反馈模块,连接至记录模块,用于将记录模块记录的第一个PDU的存储单元标识返回给上层;存储器,具有单PDU接口,连接至存储管理装置,用于根据存储管理装置的指令对长短消息进行存储,以及被存储管理装置访问。
借助于本发明的上述技术方案,通过在存储多条PDU时建立PDU与存储单元的对应关系,并向上层返回第一条PDU的存储单元标识,能够将包括多条PDU的长短消息完整、有效地存储在存储器中,并且本发明的技术方案无需对存储空间进行划分或者基于不同的短消息协议进行不同的操作,解决了相关技术中无法在存储器中有效地存储长短消息的问题,从而能够充分利用存储空间,实现对长短消息的灵活存储、以及实现在协议指定的位置存储,并且能够提高用户体验。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
具体实施方式
功能概述
针对相关技术中存在的无法在存储器中有效地存储长短消息的问题,本发明实施例提出了一种长短消息的存储机制,其中,通过在存储多条PDU时建立PDU与存储单元的对应关系,并向上层返回第一条PDU的存储单元标识,能够将包括多条PDU的长短消息完整、有效地存储在存储器中。其主要思想就是基于普通短消息的存储机制实现长短消息的存储,使得从上层用户看来长短消息和普通短消息没有区别,不会给上层用户的使用带来任何不便。
下面结合附图对本发明的实施例进行说明。
装置实施例
根据本实施例,提供了一种存储管理装置,用于管理对包括多个PDU的长短消息的存储,具有面向存储器的单PDU接口和面向上层的多PDU接口。
图1示出了根据本发明装置实施例的存储管理装置的结构,如图1所示,该存储管理装置还包括:接收模块10、存储管理模块12、对应关系维护模块14、记录模块16、反馈模块18。下面结合图1详细描述上述模块的功能。
(一)接收模块10
接收模块10用于接收来自上层的长短消息的多个PDU(这里提到的上层可以是诸如对短消息进行接收、发送以及PDU编码/解码的功能模块),还可以接收来自上层的指令(这里提到的上层可以是协议),其中,此处接收到的多个PDU是已经由上层按照协议封装并且顺序排序的多个PDU,这里提到的指令可以用于指示上层协议指定的第一个PDU的存储单元标识(需要说明的是,存储单元也可以被称为记录,存储单元标识也可以被称为记录号),也可以包括需要从存储器中读取长短消息时给出的第一个PDU的存储单元标识。
(二)存储管理模块12
存储管理模块12连接至接收模块10,用于在存储器的多个存储单元中依次存储接收模块10接收到的多个PDU。
图2示出了根据本发明装置实施例的存储管理装置中存储管理模块的结构,如图2所示,该存储管理模块12可以包括:查找子模块120、管理子模块122。下面结合图2详细说明该存储管理模块12的功能。
为达到对接收到的多个PDU进行完整存储的目的,首先查找子模块120在存储器中依次查找空闲存储单元(优选地,查找的操作可以根据下文提到的存储单元标识索引表记录的情况进行),在找到的多个空闲存储单元中,管理子模块122将多个PDU依次存储到其中;或者如果上层指定了PDU存储位置,例如,可以通过指令的形式来指定,则管理子模块122可以在接收模块10接收到的指令中的指定位置指定的存储单元存入第一个PDU,接着在查找子模块120依次查找到的N-1个空闲存储单元中顺序存储其余的N-1个PDU,这里所述的“N”表示多个PDU的数量,且为大于1的整数。可以看出,本发明实施例提供的存储管理装置既可以实现本地的自主存储,也可以实现上层的指定存储。
查找子模块120在依次查找空闲存储单元的过程中,可能会出现存储器满的情况(即,存储器中没有空闲存储单元),在这种情况下,管理子模块122可能已经在存储器中存储了多个PDU中的一个或几个PDU,此时,反馈模块18向上层发送失败信息以告知上层该次长短消息的存储操作不能继续,例如返回“存储器满”的错误信息,上层可根据该消息做出相应的操作,并且此时下述对应关系维护模块14中的设置模块144会将下述存储单元标识索引关系表还原到存储第一个PDU前的状态。
(三)对应关系维护模块14
对应关系维护模块14,连接至存储管理模块12,用于根据存储管理模块12的存储操作,通过记录当前PDU的下一PDU的存储位置来建立PDU与存储单元间的对应关系。
图3示出了根据本发明装置实施例的存储管理装置中对应关系维护模块的结构,如图3所示,对应关系维护模块14可以包括:建立模块140、判断模块142、设置模块144。下面结合图3详细说明该对应关系维护模块14的功能。
为了达到对接收到的多个PDU进行有效存储的目的,建立模块140预先建立一个存储单元标识索引关系表,该表可如表1所示,表1通过记录当前PDU的存储单元对应的存储单元标识与其下一条PDU的存储单元对应的存储单元标识之间的索引关系,来记录PDU与存储单元间的对应关系,其中,SIM、ME、SR、BM为不同类型的存储器,1到255为存储器中存储单元对应的存储单元标识(或者可以称为记录号),此外,SIM、ME、SR、BM存储器均支持普通短消息存储机制,并且,只能对单个PDU进行读写操作。
表1
如表1所示,上述对应关系可以设定为:存储单元标识对应的索引的内容为0:表示该存储单元标识对应的存储单元为空记录,记录的内容为存储单元标识本身:表示该存储单元标识对应的存储单元中存储的PDU为多个PDU的最后一个PDU或者该PDU为普通短消息的PDU,记录的内容为其它存储单元标识:表示存储单元标识对应的存储单元中存储的PDU的下个PDU存储在该其它存储单元标识对应的存储单元中。这样,在建立模块140首次建立的存储单元标识索引关系表中,只有两种情况,即,存储单元标识下记录的内容为0或者存储单元标识本身。
在存储管理模块12存储多个PDU的过程中,对应关系维护模块14遵从上述对应关系的规定,在判断模块142判断当前PDU不是最后一个PDU时,设置模块144将当前存储单元的存储单元标识对应的索引设置为:当前存储单元中存储的PDU的下一PDU所在的存储单元标识,在判断模块142判断当前PDU是最后一个PDU时,设置模块144将当前存储单元的存储单元标识对应的索引设置为:当前存储单元的存储单元标识;其中,N表示多个PDU的数量,且为大于1的整数。
当存储器中存储了完整的长短消息后,索引关系表表示的PDU与存储单元间的对应关系可如表2所示。例如,SIM卡的存储单元标识3下记录的值为5表示:存储单元标识为3的存储单元中存储了一个PDU,并且该PDU的下个PDU存储在存储单元标识为5的存储单元中,存储单元5中存储的PDU的下个PDU存储在存储单元标识为6的存储单元中,存储单元6中的PDU的下个PDU存储在存储单元标识为8的存储单元中,存储单元8中的PDU没有下个PDU,则可知一个长短消息的4个PDU分别存储在存储单元标识为3、5、6、8的存储单元中。
表2
(四)记录模块16
记录模块16,根据存储管理模块12的存储操作,记录多个PDU中第一个PDU的存储单元标识。
(五)反馈模块18
反馈模块18,连接至记录模块16,根据记录模块16记录操作,将第一个PDU的存储单元标识返回给上层。
上面描述的是存储管理装置中的对长短消息进行存储的功能单元,另一方面,存储管理装置中的对长短消息进行读取的功能单元还可以如图4所示,其中包括:读取模块20和缓存模块22。
如图4所示,读取模块20连接至接收模块10和对应关系维护模块14,用于根据接收模块10接收到的来自于上层的指令中携带的第一个PDU的存储单元标识,从存储器中读取第一个PDU,读取对应关系维护模块14中的索引关系表,并根据索引关系表读取其余的PDU;缓存模块22,连接至读取模块20,用于将读取模块20读取的多个PDU进行缓存。此外,反馈模块18还可以进一步用于将缓存模块20缓存的多个PDU返回给上层。
图5示出了根据本发明优选实施例的存储管理装置的结构,该装置的包括:接收模块10、存储管理模块12、对应关系维护模块14、记录模块16、反馈模块18、读取模块20、缓存模块22,以及存储管理模块12包括:查找子模块120、管理子模块122,对应关系维护模块14包括:建立模块140、判断模块142、设置模块144。该装置的功能与上述图1至图4中所示的装置或模块的功能类似,这里不再赘述。
使用本实施例提供的技术方案,通过在存储多条PDU时建立PDU与存储单元的对应关系,并向上层返回第一条PDU的存储单元标识,能够将包括多条PDU的长短消息完整、有效地存储在存储器中。
***实施例
根据本实施例,提供了一种存储***。
图6示出了根据本发明***实施例的存储***的结构,如图6所示,根据本发明***实施例的存储***包括:存储管理装置60和存储器62。下面结合图6详细描述上述装置的功能。
存储管理装置60,具有面向存储器60的单PDU接口和面向上层的多PDU接口,用于管理对包括多个PDU的长短消息在存储器62中的存储,该存储管理装置60可以是如图1所示的存储管理装置,包括接收模块600、存储管理模块602、对应关系维护模块604、记录模块606、反馈模块608,优选地,该存储管理装置60也可以是如图1或图4所示的装置与图2或图3所示的模块的任意组合。
存储器62,具有单PDU接口,连接至存储管理装置,用于根据存储管理装置60的指令对长短消息进行存储,以及被存储管理装置访问。如上所述,存储器62可以是多种类型的存储器,例如SIM、ME、SR、BM存储器,并且存储器62支持普通短消息存储机制、只能对单个PDU进行读写操作。
图7示出了图6所示存储***实现长短消息的存储的流程,该流程包括对长短消息进行存储以及从存储器中读取长短消息的处理,如图7所示,该流程包括如下处理过程:
步骤702,存储管理装置60接收到来自上层的长短消息的多个PDU和/或上层指定的第一个PDU的存储单元标识;
步骤704,存储管理装置60将多个PDU存储到存储器62中;
步骤706,存储管理装置60记录第一个PDU的存储单元标识;
步骤708,存储管理装置60建立PDU与存储单元的对应关系;
步骤710,存储管理装置60将第一个PDU的存储单元标识返回给上层;
步骤712,存储管理装置60接收到来自上层的第一个PDU的存储单元标识;
步骤714,存储管理装置60从存储器62中读取第一个PDU并缓存;
步骤716,存储管理装置60根据PDU与存储单元的对应关系从存储器62中读取其余的PDU并缓存;
步骤718,存储管理装置60将缓存的所有PDU返回给上层。
使用本实施例提供的技术方案,过在存储多条PDU时建立PDU与存储单元的对应关系,并向上层返回第一条PDU的存储单元标识,能够将包括多条PDU的长短消息完整、有效地存储在存储器中。
方法实施例
根据本实施例,提供了一种长短消息的存储方法。
图8示出了根据本发明方法实施例的长短消息的存储方法的处理流程,需要说明的是,在以下方法中描述的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在图8中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。如图8所示,该方法包括以下所述的步骤S802-S806:
步骤S802,接收上层发送的长短消息的多个PDU;
步骤S804,在存储器的多个存储单元中依次存储多个PDU,通过记录当前PDU的下一PDU的存储位置来建立PDU与存储单元间的对应关系;
步骤S806,记录多个PDU中的第一个PDU的存储单元标识,并向上层返回第一个PDU的存储单元标识。
下面详细说明上述处理过程的细节。
在步骤S804中,可以通过两种方案在存储器中存储第一个PDU:方案一,由存储管理装置自主在本地查找空闲存储单元中存储第一个PDU,查找不到空闲存储单元的情况下,返回失败;方案二,由上层通过指令的形式指定存储单元中存储第一个PDU。在存储其余PDU时,继续由存储管理装置在本地自主查找空闲存储单元并存储其余PDU,在查找不到空闲存储单元的情况下,返回失败,并将索引关系表还原到存储第一个PDU之前的状态。可以看出,本发明实施例提供的长短消息的存储方法既可以实现本地的自主存储,也可以实现上层的指定存储,这样,实现了对长短消息进行完整存储的目的。
在步骤S804中,要达到对多个PDU有效存储的目的,就要通过记录当前PDU的下一PDU的存储位置来来建立PDU与存储单元间的对应关系,这一操作具体包括:步骤1,首先调用根据存储器已有的存储状况预先建立的存储单元标识索引关系表,在该表中通过记录PDU的存储单元对应的存储单元标识与其下一条PDU的存储单元对应的存储单元标识之间的索引关系来实现PDU与存储单元间的对应关系;优选地,在索引关系表中,可以将空闲存储单元对应的存储单元标识对应的索引设置为空闲标志,例如,将存储单元标识对应的索引设置为0表示存储单元标识对应的存储单元为空闲存储单元(或者称为空记录);步骤2,对于存储不是最后一个PDU的存储单元,将当前存储单元的存储单元标识对应的索引设置为:当前存储单元中存储的当前PDU的下一PDU所在的存储单元标识;对于存储最后一个PDU的存储单元,将当前存储单元的存储单元标识对应的索引设置为:当前存储单元的存储单元标识。通过上述步骤1和步骤2有效地建立了PDU与存储单元间的关系,这样,在对长短消息进行完整存储的基础上进一步地实现了有效存储,不仅标识了单个PDU的存储位置,更标识了PDU之间的存储链接关系。
使用本实施例提供的技术方案,过在存储多条PDU时建立PDU与存储单元的对应关系,并向上层返回第一条PDU的存储单元标识,能够将包括多条PDU的长短消息完整、有效地存储在存储器中。
图9示出了根据本发明方法实施例的长短消息的存储方法的具体实施的流程,在具体实施之前,已经建立了存储单元标识索引关系表,如图9所示,该处理流程包括步骤:
步骤902,设置指针Index,Index记录短消息在存储器中的地址,Index的值为存储单元标识,设置指针CurIndex,CurIndex记录存储多个PDU的过程中存储当前PDU的存储单元对应的存储单元标识,Index和CurIndex初始值都为0;
步骤904,设置指针EmptyIndex,EmptyIndex记录查找到的空记录的存储单元标识;
步骤906,判断指针EmptyIndex当前所指的存储单元标识在索引关系表中对应的值是否为0,为0时,处理进行到步骤908,否则,进行到步骤910;
步骤908,如果EmptyIndex为0,表示没有找到空记录,返回错误信息“存储器满”,并还原索引关系表到此次存储操作前的状况;
步骤910,如果EmptyIndex不为0,判断CurIndex的值是否为0,在判断为0时,处理进行到912,否则,进行到914;
步骤912,CurIndex为0表示EmptyIndex用来存放第一条PDU,此时,令Index=EmptyIndex;
步骤914,CurIndex不等于0表示CurIndex所指的当前存储单元已经存放了PDU,此时,令EmptyIndex所指的存储单元用来存放下条PDU,并修改PDU索引表,在索引关系表中令CurIndex所指的存储单元标识的表项为EmptyIndex,即,PduTable[CurIndex]=EmptyIndex;
步骤916,令CurIndex=EmptyIndex,即,将新的空记录作为当前存储单元标识;
步骤918,在当前存储单元标识对应的存储单元中写PDU;
步骤920,判断当前PDU是否还有后续PDU,在有的情况下,处理返回到步骤904,否则,进行到步骤922;
步骤922,如果没有后续PDU,修改索引关系表,CurIndex对应的表项为CurIndex,返回短消息第一段PDU存储的位置(即Index)给上层。
以上描述的是将多个PDU存储到存储器中的处理过程,另一方面,从存储器中读取多个PDU的方法还包括:步骤1,根据上层提供的第一个PDU的存储单元标识,从存储单元标识对应的第一存储单元中读取第一个PDU,并获取第一存储单元的第一存储单元标识;步骤2,读取存储单元标识索引关系表,查找第一存储单元标识对应的索引,从索引对应的第二存储单元中读取第二个PDU;步骤3,继续遍历存储单元标识索引关系表,直到读取所有PDU;步骤4,缓存并返回读取到的所有PDU。
图10示出了根据本发明方法实施例的长短消息的存储方法的具体实施的另一流程,如图10所示,该处理流程包括如下步骤:
步骤1002,另CurIndex指向上层指定的存储第一个PDU的存储单元对应的存储单元标识;
步骤1004,读出CurIndex所指的存储单元中的PDU并缓存;
步骤1006,根据索引关系表判断当前CurIndex所指的存储单元标识是否有后续的存储单元标识,即,判断当前的PDU是否有后续PDU,在有后续PDU的时,处理进行到步骤1008,否则,进行到步骤1010;
步骤1008,获取存储下个PDU的存储单元对应的存储标识,处理返回到步骤1004;
步骤1010,将缓存的所有PDU返回给上层。
综上所述,借助于本发明的技术方案,通过在存储多条PDU时建立PDU与存储单元的对应关系,并向上层返回第一条PDU的存储单元标识,能够基于普通短消息的存储模式将包括多条PDU的长短消息完整、有效地存储在存储器中,并且本发明的技术方案无需对存储空间进行划分或者基于不同的短消息协议进行不同的操作,解决了相关技术中无法在存储器中有效地存储长短消息的问题,从而能够充分利用存储空间,实现在协议指定的位置存储,并且能够提高用户体验。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。