手持装置的产品种类非常广泛,包括从低端的电子记事本、无线电话等到高端的掌上电脑、手持计算机等。作为手持装置的一个例子,3COM公司的PalmPilot占据着全球63%的市场份额。到今为止,在PalmPilot平台上,已经有超过1万个开发者。有超过2000家第三方应用厂商在这上面开发出包括通信、游戏等各种各样的应用软件。
尽管手持装置的种类繁多,但是它们都具有一个共同的特点,即为了保持手持装置的轻便性,它们都具有较小的体积和重量,并且尽量节省功耗。因此,手持装置的硬件资源非常有限。
比如与桌面系统相比,手持装置不具有磁盘这样的大容量外存设备。在手持装置中,一般只设置一个存储器模块作为内存。目前的手持装置中的总内存空间一般小于1M。虽然在手持装置中可以使用PCMCIA卡对内存进行扩充,但是扩充后的容量一般也只有几兆,远不能同桌面系统中使用的磁盘和光盘的存储容量相比。
由于低的功耗要求,使得手持装置的计算速度也非常有限,根本不能与桌面系统的运算速度相比。
正是由于如上所述的手持装置中有限的存储空间,所以如何在手持装置中存储数据才能更节省空间始终是一个值得讨论的技术问题。另外,鉴于手持装置中有限的计算速度,如何才能快速检索存储在手持装置中的数据是另外一个值得讨论的技术问题。
为了更好地解决上述问题,不得不涉及到手持装置所使用的操作系统。针对手持装置资源有限的特点,已经开发了多种多样的操作系统。其中较著名的有3COM公司的PalmOS、微软公司的Windows CE、苹果公司的Newton Intelligence、Geowork公司的GEOS、GeneralMagic公司的Magic Cap以及Co公司的PenPoint等等。本发明以基于PalmOS操作系统的手持装置为例讨论和解决上述技术问题。
IBM公司的WorkPad以及3COM公司的PalmPilot即是采用PalmOS作为操作系统的代表性产品。目前版本的WorkPad中只提供了1至2MB的存储空间。另外,所使用的16MHz的Motorola68000系列处理器,也限制了它的计算速度。
在WorkPad中,存储空间分为ROM和RAM,位于同一个存储器模块中。ROM容量为0.5至1.5MB,RAM最小容量为1M。在ROM中预先置入PalmOS的主要应用程序组。其他的或者替换的应用程序和系统扩充可以装载到RAM中,但是受RAM存储容量的限制,这并非始终是实际可行的。可以通过更换ROM对软件进行升级或提高。也可以通过安装单个存储器模块来完全更换整个系统软件和应用程序组。
PalmOS系统软件虽然是围绕着32位体系结构设计的,即具有32位地址,向软件提供了4GB的地址空间用于存储代码和数据,但是在少量RAM的情况下也能够有效地工作。PalmOS系统软件将整个可用的RAM分为两个虚拟的部分:动态RAM和存储RAM。动态RAM为32K,用作PalmOS的工作空间,用于栈、全局变量、暂时内存分配等。动作RAM类似于一般桌面系统中所安装的总内存容量。其余的RAM指定为存储RAM,用于存储象约会、任务表、备忘录、通讯录等这样的用户数据。这里的用户数据也可以是第三方为WorkPad开发的应用程序。存储RAM类似于一般桌面系统中的磁盘存储器。因为始终向内存系统提供电力,所以在“关掉”手持装置(即处于低功耗的睡眠方式)时,两个RAM区域能够保留它们的存储内容。在对手持装置进行复位时,所有存储器受到保护,但是作为引导序列的一部分,系统软件可能对动态RAM重新进行初始化。
在基于PalmOS的手持装置中,由于具有有限容量的动态存储器并且使用非易失性RAM而不是磁盘存储器,所以为了存储和检索用户数据,比如会议或通讯录表项,传统的文件系统不是最佳方式。
传统的文件系统,首先将一部分文件从磁盘读入内存缓冲器,在内存缓冲器内使用或者更新信息,然后将更新后的信息写回到磁盘中。由于读盘或写盘造成的高度延迟,以及从磁盘读一次或写一次数据一般包括几千字节,所以使用小的存储缓冲器不是实际的。
在基于PalmOS的手持装置中,直接在原位对数据进行更新和访问数据,因为所有非易失性信息都存储在内存中,这避免了文件系统中从/向存储缓冲器传送数据造成的额外开销,并且降低了对动态存储器的要求。
但是由于不采用文件系统,所以目前流行的数据库技术在基于PalmOS的手持装置中很难得到采用。例如,在目前的数据库技术中,对于关键字,可以建立一个索引文件,从而便于以关键字为索引对数据库进行检索。然而在基于PalmOS的手持装置中,为了利用关键字对数据库进行检索,必须由事先编写好的应用程序逐条地对记录数据和关键字进行比较。编写这样的应用程序不但非常繁琐,重复劳动过多;而且检索速度很慢,因为需要进行过多的字符串比较运算。
如何在基于PalmOS的手持装置中在有限的存储空间中有效地存储和快速地检索数据是本发明要解决的问题。
因此,本发明的第一个目的在于提供一种将数据存储到基于PalmOS的手持装置中的方法。
本发明的第二个目的在于提供一种利用关键字从基于PalmOS的手持装置中检索数据的方法。
本发明的第三个目的在于提供一种将数据存储到基于PalmOS的手持装置中的装置。
本发明的第四个目的在于提供一种利用关键字从基于PalmOS的手持装置中检索数据的装置。
为实现上述第一个目的,本发明提供一种将数据存储到基于PalmOS的手持装置中的方法,所述数据至少包括一条记录,其中每条记录含有一个用于标识该条记录的关键字,其特征在于包括以下步骤:
将所述每条记录作为一个资源存储到所述手持装置中的一个资源数据库中,
其中将每条记录含有的所述关键字转换为一个长整数,将所述长整数分为两部分,分别作为资源类型和资源ID存储到所述资源数据库的首部中与该条记录相应的一个资源信息表项中,其中,由所述关键字转换而得的所述长整数是一个N进制整数,其中N为一个常整数,该常整数等于所有记录中的关键字所涉及到的字符种类总数。
为实现上述第二个目的,本发明提供利用关键字从基于PalmOS的手持装置中检索数据的方法,其中所述数据是根据前述方法存储到所述手持装置中的,其特征在于包括以下步骤:
将所述关键字转换为一个长整数;
将所述长整数分为两部分,分别作为资源类型和资源ID,利用PalmOS从相应的资源数据库中获得与所述资源类型和所述资源ID唯一对应的资源;
获取所述资源中的全部数据,作为检索到的数据,
其中,将所述关键字转换为一个长整数的步骤是将所述关键字转换为一个N进制整数,其中N等于在将所述数据存储到所述手持装置中时使用的常整数。
为实现上述第三个目的,本发明提供一种将数据存储到基于PalmOS的手持装置中的装置,所述数据至少包括一条记录,其中每条记录含有一个用于标识该条记录的关键字,其特征在于包括:
字符串-整数转换装置,用于将记录中所含的所述关键字转换为一个长整数,其中,所述长整数是一个N进制整数,其中N等于在将所述数据存储到所述手持装置中时使用的常整数;
资源合成装置,用于将所述长整数分为两部分,分别作为资源类型和资源ID,与记录内容一起合成一个新的资源;
资源数据库更新装置,用于将所述新资源增加到所述手持装置中的资源数据库中。
为实现上述第四个目的,本发明提供一种利用关键字从基于PalmOS的手持装置中检索数据的装置,其中所述数据是利用根据权利要求6的装置存储到所述手持装置中的,其特征在于包括:
字符串-整数转换装置,用于将所述关键字转换为一个长整数,其中,所述长整数是一个N进制整数,其中N等于在将所述数据存储到所述手持装置中时使用的常整数;
资源数据库检索装置,用于将所述长整数分为两部分,分别作为资源类型和资源ID,利用PalmOS从相应的资源数据库中获得与所述资源类型和所述资源ID唯一对应的资源,从所述资源中获取检索数据。
利用本发明的数据存储方法,在存储由关键字标识的数据时,将关键字变换为一个长整数,然后巧妙地作为资源类型和资源ID,直接利用操作系统本身的功能,实现了数据库的快速检索,同时省去了存储关键字和索引的空间。另外,由于整数运算速度明显快于字符串运算速度,所以与常规的直接利用关键字进行检索的方法相比,本发明的检索方法速度较快。
作为更广泛的应用,在存储字符数据时,可以以串为单位首先变换为整数,然后再存储,大大节省存储空间。如果以n代表所存储的字符数据中涉及到的字符种类总数,则本发明的方法可以节省(1-log(n)/log(256))×100%的存储空间。另外一个优点是,所存储的数据不易辨识,起到一定程度的加密作用。
为了更好地理解本发明方法和装置,首先简单介绍PalmOS环境中的数据存储和管理方法。
PalmOS环境中,数据是按块存储的。PalmOS提供一组资源管理程序,利用它能够方便地获取和保存数据块。每个数据块具有一个局部ID。该局部ID是相对于每个存储卡而言的。不管将存储卡插到手持装置中的哪个存储卡插槽中,局部ID都是有效的。因此,一旦存储卡的基地址是已知的,则可以容易地将局部ID转换为一个指向该存储卡中的数据块的指针。
可以利用唯一资源类型和唯一资源ID为每个数据块作标记,标记后的数据块,称为资源。资源存储在资源数据库中。一个资源一般用于存储应用程序的用户界面元素,比如图象、字形、对话框等等。在PalmOS环境中,一个应用程序事实上仅仅是一个资源数据库,可执行代码作为一个或多个代码资源存储,而图形元素和其他数据作为其他资源类型存储在同一数据库中。例如,应用程序通讯录(AddresBook)的资源类型为“ADDR”。
对于一个资源来说,资源类型和资源ID存储在资源数据库的首部中,资源数据存储在某内存管理块中。资源数据库首部包括某些通用数据库信息,后随一个资源表。资源表中含有若干个资源信息表项,每个资源信息表项为10字节长,其中包括资源类型(4字节)、资源ID(2字节)和存储了资源数据的内存管理块的局部ID(4字节)。
由于一个资源的资源类型和资源ID是唯一的,所以可以利用某资源类型和资源ID唯一地确定相应资源在内存中位置。PalmOS操作系统提供了多种应用程序接口调用用于对资源数据库进行管理,其中一种应用程序接口调用是DmGetResource,在给定资源类型和资源ID作为参数的情况下,它能够返回一个指向所标识的资源数据的指针。
由此,本发明人设想到,当在手持装置的存储器中存储可由关键字标识的数据时,是否可以将关键字分为两部分,分别作为资源类型和资源ID存储到资源数据库首部中的资源信息表项中,同时把所标识的数据作为一个资源存储到同一资源数据库中。如果可行的话,由于直接通过操作系统的参与,则可以大大提高数据检索速度。
但是,将关键字简单地分为两部分,分别作为资源类型和资源ID,存在着一个问题。即,由于PalmOS所要求的资源类型(4字节)和资源ID(2字节)的唯一性,使得关键字(此时只有6字节长)的取值非常有限,不能满足实际需要。同时容易与PalmOS目前所使用的资源类型比如“CODE”、“ADDR”混淆。因此,必须采取某种变换手段,将关键字变换为一个4字节部分和一个2字节部分,并且对于不同的关键字取值,所得到的两个部分取值是唯一的。
上述关键字的变换方法涉及到如何在有限的存储空间中存储更多的字符数据。本发明人为此对字符数据的存储方法进行了深入的研究。
按照常规方法,字符数据是作为8位ACSII码进行存储的,即一个字节存储一个字符。以字母数据(只含有26个字母)为例,如果只使用5或6位(可表示25=32或26=64个字母)来存储一个字母,则可以节省30%的存储空间。但是这种直接变换方法将增加手持装置的计算负担。
本发明中采用了一种折衷的方法:将字符数据变换为N进制整数,其中N是字符数据中所使用的字符的种类总数。
为了便于理解,首先以只包括26个字母和空格的字符数据为例说明本发明的将字符数据变换为N进制整数的方法。这里N等于27。
第一步,将关键字中所含的每个字母按照表1变换为相应的整数,并将空格变换为0。
表1
字母 |
a |
b |
c |
d |
e |
f |
g |
整数 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
字母 |
h |
i |
j |
k |
l |
m |
n |
整数 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
字母 |
o |
p |
q |
r |
s |
t |
|
整数 |
15 |
16 |
17 |
18 |
19 |
20 |
|
字母 |
u |
v |
w |
x |
y |
z |
|
整数 |
21 |
22 |
23 |
24 |
25 |
26 |
|
第二步,将所得到的整数分别乘以27的相应次幂,得到若干个乘积。其中,幂的次数与原字母在关键字中的位置有关,使得不同的位置对应不同的次数。
第三步,将得到的若干个乘积相加,即得到一个27进制整数。
下面给出一个例子,说明上述变换过程。
假设关键字为“accelerate”,首先将所含的10个字母分别变换为10个整数:
1、3、3、5、12、5、18、1、20、5。
然后,将这10个整数分别乘以27的相应次幂,假设这里采用的幂的次数为原字母在关键字中的位置号,即0至9。于是得到10个乘积:
1×270
3×271
3×272
5×273
12×274
5×275
18×276
1×277
20×278
5×279
最后,将以上10个乘积相加即得到一个27进制整数:
43,794,090,299,071。
该整数是一个长整数。在手持装置中,它可以用6个字节存储。而按照常规方法,“accelarate”必须用10个字节存储。显然可以节省4个字节的存储空间。
将本发明的上述方法推广到更一般的情况,可以将一个关键字B按如下公式变换为一个N进制整数m,
其中:
L为关键字B的长度,
N为变换表A(例如各单词中的字母变换后的码值)中的元素个数,
bi为关键字B中的第i个字符的ACSII码值,
a(bi)为bi在变换表A中对应的变换后的码值,
s(i)的取值与关键字中的字符编码顺序有关,例如:
(1)若以从左到右顺序编码,则s(1),...,s(L)的取值分别为1,...,L;
(2)若以从右到左顺序编码,则s(1),...,s(L)的取值分别为L,...,1。
(3)若先对奇数位置的字符进行编码,然后对偶数位置的字符进行编码,则s(1),...,s(L)的取值分别为1,1+L/2,2,2+L/2,...,L/2,L。这里,当L为奇数时,当然存在对L/2取整的问题。这些都属于本领域内熟练的技术人员的常识,不再赘述。
以上三种取值方法只是用于举例说明。在实际使用中,可以根据需要选择上述三种方法之一或者其他的方法。
例如关键字B为“accelerate”时,L=10,b(1),...,b(L)分别对应a,c,c,e,l,e,r,a,t,e。)。上述三种情况下s(1),...,s(10)的取值分别为:
(1)1,2,...,10;
(2)10,9,...,1;
(3)1,6,2,7,...,5,10。
另外,在对英文单词进行变换时,可以从单词的最后一个字母向前顺序地取10个字母,作为关键字B。这样,在英文单词长度超过10个字母时,所取的关键字是不同的,从而能够标识不同的英文单词。
采用上述将关键字变换为整数的方法,就可方便地实现根据本发明的将数据存储到基于PalmOS的手持装置中的方法,这里的数据至少包括一条记录,其中每条记录含有一个用于标识该条记录的关键字。该存储方法包括以下步骤:
将每条记录作为一个资源存储到手持装置中的一个资源数据库中,
其中将每条记录含有的关键字转换为一个长整数,将该长整数分为两部分,分别作为资源类型和资源ID存储到资源数据库的首部中与该条记录相应的一个资源信息表项中。
在上述方法中,可以只将每条记录中除关键字之外的内容作为一个资源进行存储。于是,进一步节省了存储空间。
在这里没有必要给出更加具体的编程细节。因为本领域内熟练的技术人员根据以上所述完全可以非常容易地编写出实现上述将字符数据存储到手持装置中的方法的程序,而不需花费任何创造性的劳动。
例如,设计人员可以直接在手持装置中建立一个资源数据库,逐条地取得字符数据的每条记录,将关键字变换为长整数,然后分为两部分,分别对资源类型和资源ID赋值,将记录内容作为资源数据,通过PalmOS提供的应用程序接口调用,把按照上述赋值的新资源加到资源数据库中。
图1示出本发明的将数据存储到基于PalmOS的手持装置中的方法的第一实施方式的流程图。步骤120确定是否有新的字符数据记录存储到手持装置中。如果步骤120的判断为否,则过程结束;否则,过程进到步骤130。步骤130,从记录中截取关键字。步骤140,将关键字变换为一个6字节的长整数。步骤150,对即将存储到资源数据库中的新资源进行赋值,其中将长整数的前4个字节作为资源类型,后2个字节作为资源ID,将关键字所标识的数据内容作为资源数据。步骤160,将新的资源加到手持装置中的资源数据库中,然后返回步骤120。
作为另一种更方便的形式,可以在桌面系统中利用现行的各种开发工具按照PalmOS规定的资源数据库的格式,构造一个资源数据库文件。将待存储到手持装置中的数据预先存储到该资源数据库文件中。然后,利用基于PalmOS的手持装置所普遍提供的数据热同步(HotSyncTM)功能,将上述资源数据库文件加载到手持装置中。
图2示出本发明的将数据存储到基于PalmOS的手持装置中的方法的第二实施方式的流程图。步骤110,在桌面系统中按照PalmOS规定的资源数据库的格式建立一个数据库文件。步骤120确定是否有新的字符数据记录存储到手持装置中。如果步骤120的判断为否,则过程进行到步骤170;否则,过程进到步骤130。步骤130,从记录中截取关键字。步骤140,将关键字变换为一个6字节的长整数。步骤150,对即将存储到数据库文件中的新资源进行赋值,其中将长整数的前4个字节作为资源类型,后2个字节作为资源ID,将关键字所标识的数据内容作为资源数据。步骤160,新资源增加到数据库文件中,然后返回步骤120。步骤170,利用适当的手段(比如数据热同步)将数据库文件从桌面系统传送到手持装置中。
上述数据热同步是一种使手持装置与桌面系统之间的数据自动进行同步的过程。在手持装置中进行的修改在热同步之后可以反映到桌面系统中,反之亦然。
上述数据热同步可以利用集成到手持装置中的PC连接功能实现。手持装置利用一个与桌面系统连接的插座以及用于桌面系统的软件进行数据热同步。这种软件提供了手持装置中所有数据的“单键”备份和与桌面系统的同步。
本发明还提供一种与上述存储方法相应的数据检索方法,即,一种利用关键字从基于PalmOS的手持装置中检索数据的方法,其中数据是根据本发明数据存储方法存储到手持装置中的,该检索方法包括以下步骤:
将关键字转换为一个长整数;
将该长整数分为两部分,分别作为资源类型和资源ID,利用PalmOS从相应的资源数据库中获得与该资源类型和资源ID唯一对应的资源;
获取资源中的全部数据,作为检索到的数据。
在这里没有必要给出更加具体的编程细节。因为本领域内熟练的技术人员根据以上所述完全可以非常容易地编写出实现上述将字符数据存储到手持装置中的方法的程序,而不需花费任何创造性的劳动。
例如,将关键字变换为长整数,分为两部分,分别对资源类型和资源ID赋值,通过以下应用程序接口调用迅速获得相应的资源:
VoidHand DmGetResource(ULong type,Int ID)
其中type为资源类型
ID为资源ID
该调用返回指向资源数据的指针;若不成功则返回空指针NIL。
图3示出本发明的利用关键字从基于PalmOS的手持装置中检索数据的方法的流程图。步骤130,读取输入的关键字。步骤140,将关键字变换为一个6字节的长整数。步骤150,将长整数的前4个字节作为资源类型,将长整数的后2个字节作为资源ID。步骤180,以资源类型和资源ID为参数调用相应的PalmOS的应用程序接口功能调用,获得一个指针。步骤190,在指针不为空的情况下从指针指向的内存管理块中获取数据作为检索到的数据。
本发明的上述字符数据存储方法和检索方法具有广泛的用途,只要所存储的数据能够利用关键字索引即可。这种数据比如是各种字典中的以词头为索引的词条数据,通讯录中的以姓名为索引的记录,帐目中的以日期为索引的借贷等等。本发明的方法也可以用于文本自动校对、纠错等。
图4是本发明的将数据存储到基于PalmOS的手持装置中的装置的框图。该数据存储装置包括字符串-整数转换装置401、资源合成装置402和资源数据库更新装置403。图中的标号404指基于PalmOS的手持装置中的一个资源数据库,可以是为了存储相关的记录数据而建立的一个资源数据库。在工作时,字符串-整数转换装置401逐条地将待存储记录中所含的关键字转换为一个长整数,然后将这个长整数输出到资源合成装置402。资源合成装置402将输入的长整数分为两部分,分别作为资源类型和资源ID,与记录内容一起合成一个新的资源。然后,资源数据库更新装置403利用操作系统提供的应用程序接口调用,将新资源增加到资源数据库404中。
图5是本发明的利用关键字从基于PalmOS的手持装置中检索数据的装置的框图。在手持装置中,已经利用图4所示的数据存储装置存储了字符数据。图5所示的检索装置包括字符串-整数转换装置501、资源数据库检索装置502。图中的标号404指基于PalmOS的手持装置中的一个资源数据库,在该资源数据库中已经利用图4所示的数据存储装置存储了字符数据。在工作时,字符串-整数转换装置501将输入的关键字转换为一个长整数,然后将该长整数输出到资源数据库检索装置502。资源数据库检索装置502,将输入的长整数分为两部分,分别作为资源类型和资源ID,利用PalmOS从资源数据库404中获得与该资源类型和资源ID唯一对应的资源,然后从资源中获取检索数据。
虽然以上结合附图详细描述了本发明的最佳实施方式,但是对于本领域内熟练的技术人员而言,可以做出各种修改和变更,而不背离本发明的精神和实质。因此,本发明的范围仅由权利要求书限定。