一种查询好友信息的方法和系统的制作方法

文档序号:6491563阅读:207来源:国知局
一种查询好友信息的方法和系统的制作方法
【专利摘要】本发明公开一种查询好友信息的方法和系统,所述方法包括:在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息;在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列;接收到查询好友信息中字段请求时,在查询节点数组中查询好友节点,获取好友信息在字节数组中的起始位置;根据起始位置和字段长度查询字段。本发明能够解决存储好友列表占用存储空间过大的问题。
【专利说明】一种查询好友信息的方法和系统
【技术领域】
[0001]本发明涉及计算机领域,特别涉及一种查询好友信息的方法和系统。
【背景技术】
[0002]即时通讯工具中,用户的数据占用了大量的内存存储,用户的数据中包含用户状态数据和用户的好友列表。特别是好友列表,在线活跃用户的平均好友数超过100个,每个用户平均要缓存100个好友的数据,好友的数据包括:好友唯一标识ID,好友分组,好友昵称等等常用属性。
[0003]现有技术中,通过字典(哈希表)的方法保存好友列表。其中,以好友的唯一标识ID作为Key (关键码),好友信息的内容作为值(Value)来存储。采用现有技术中的方法,存储一个100好友的用户至少需要存100个key和100个好友对象。此外,对于每个好友还需要缓存该好友的对象元数据,对象元数据为系统为对好友列表进行操作而维护的大量操作信息数据,例如,指针,头信息等数据。此对象元数据带来了许多额外的存储开销,一个用户大概需要22KB的内存。如此,缓存300万个在线用户,则需要60GB左右的内存。
[0004]可见,现有技术中存储好友列表的技术方案存在占用存储空间过大的问题。

【发明内容】

[0005]本发明提供了一种查询好友信息的方法和系统,以解决存储好友列表占用存储空间过大的问题。
[0006]本发明公开了一种查询好友信息的方法,所述方法包括:
[0007]在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息;
[0008]在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列;
[0009]其中,在存储每个好友信息时,按预设顺序存储好友信息中各个字段,预设顺序包括:先存储各个固定长度字段,之后存储各个可变长度字段,
[0010]在存储可变长度字段时,先存储可变长度字段的长度,之后存储可变长度字段的内容;
[0011]所述方法还包括:
[0012]接收到查询好友信息中字段的请求时,依据所述请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置;
[0013]在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段;
[0014]在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段。[0015]其中,所述在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段具体包括:
[0016]在所述待查询字段为固定长度字段时,根据预设顺序确定所述待查询字段之前的固定长度字段,将待查询字段之前的各个固定长度字段的长度相加得出待查询字段的偏移量,从起始位置起偏移量个字节后的位置为待查询字段的起始位置;
[0017]所述在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段具体包括:
[0018]在所述待查询字段为可变长度字段时,根据起始位置和所有固定长度字段的长度得出第一个可变长度字段的起始位置,根据预设顺序得出待查询字段的顺序号,从第一个可变长度字段的起始位置开始,读取可变长度字段的长度,按所述长度跳到下一个可变长度字段的起始位置,直到依据顺序号确定跳到待查询字段的起始位置为止。
[0019]其中,所述方法还包括:
[0020]在删除好友信息时,从查询节点数组中删除对应的好友节点,并将删除的好友节点之后的好友节点在查询节点数组中依次前移,并将删除的好友节点放入删除节点数组中。
[0021]其中,所述方法还包括:
[0022]在插入好友信息时,生成所述好友信息的好友节点,根据好友节点中好友唯一标识确定该好友节点在查询节点数组中的位置,将好友节点插入所述位置;
[0023]按预设顺序排列好友信息中的字段,在可变长度字段的内容前添加该可变长度字段的长度,以完成对好友信息的序列化操作;
[0024]查询删除节点数组,判断是否存在对应的好友信息总长度不小于所述序列化后的好友信息总长度的好友节点;
[0025]如果存在,则用所述序列化后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并在查询节点数组中的插入的好友节点中记录存储所述插入的好友信息的起始位置,将好友信息被替换的好友节点从删除节点数组中删除;
[0026]如果不存在,则从字节数组的结尾开始存储所述序列化后的好友信息,在插入的好友信息所在的好友节点中记录存储所述插入的好友信息的起始位置。
[0027]其中,在修改好友信息时,从字节数组中查询到待修改的好友信息的字段;
[0028]在待修改的字段为固定长度字段时,直接修改查询到的字段;
[0029]在待修改的字段为可变长度字段时,从查询到的字段头部读出所述字段的长度,判断修改后的字段长度是否大于读出的所述字段的长度,如果不是,则直接修改查询到的字段;
[0030]如果是,则进行如下操作:
[0031]查询删除节点数组,判断是否存在对应的好友信息总长度不小于修改后的好友信息总长度的好友节点;
[0032]如果存在,用所述修改后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并将好友信息被替换的好友节点从删除节点数组中删除;
[0033]如果不存在,则从字节数组的结尾开始存储所述修改后的好友信息;
[0034]完成修改后,将待修改的好友信息在查询节点数组中的好友节点复制,将复制的好友节点放入删除节点数组中,并将查询节点数组中的所述好友节点中起始位置更新为字节数组中存储修改后的好友信息的起始位置。
[0035]其中,所述在查询节点数组中查询对应的好友节点包括:
[0036]按二分法在查询节点数组中查询对应的好友节点。
[0037]本发明还公开了一种查询好友信息的系统,所述系统包括:
[0038]信息存储模块,用于在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息,
[0039]其中,在存储每个好友信息时,用于按预设顺序存储好友信息中各个字段,预设顺序包括:先存储各个固定长度字段,之后存储各个可变长度字段,
[0040]在存储可变长度字段时,用于先存储可变长度字段的长度,之后存储可变长度字段的内容;
[0041 ] 索引存储模块,用于在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列;
[0042]查询模块,用于接收到查询好友信息中字段的请求时,依据所述请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置;在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段;在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段。
[0043]其中,所述查询模块,具体用于在待查询字段为固定长度字段时,根据预设顺序确定所述待查询字段之前的固定长度字段,将待查询字段之前的各个固定长度字段的长度相加得出待查询字段的偏移量,从起始位置起偏移量个字节后的位置为待查询字段的起始位置;
[0044]在待查询字段为可变长度字段时,根据起始位置和所有固定长度字段的长度得出第一个可变长度字段的起始位置,根据预设顺序得出待查询字段的顺序号,从第一个可变长度字段的起始位置开始,读取可变长度字段的长度,按所述长度跳到下一个可变长度字段的起始位置,直到依据顺序号确定跳到待查询字段的起始位置为止。
[0045]其中,所述系统还包括:
[0046]删除模块,用于在删除好友信息时,从查询节点数组中删除对应的好友节点,并将删除的好友节点之后的好友节点在查询节点数组中依次前移,并将删除的好友节点放入删除节点数组中。
[0047]其中,所述系统还包括:
[0048]插入模块,用于在插入好友信息时,生成所述好友信息的好友节点,根据好友节点中好友唯一标识确定该好友节点在查询节点数组中的位置,将好友节点插入所述位置;
[0049]按预设顺序排列好友信息中的字段,在可变长度字段的内容前添加该可变长度字段的长度,以完成对好友信息的序列化操作;
[0050]查询删除节点数组,判断是否存在对应的好友信息总长度不小于所述序列化后的好友信息总长度的好友节点;
[0051]如果存在,则用所述序列化后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并在查询节点数组中的插入的好友节点中记录存储所述插入的好友信息的起始位置,将好友信息被替换的好友节点从删除节点数组中删除;
[0052]如果不存在,则从字节数组的结尾开始存储所述序列化后的好友信息,在插入的好友信息所在的好友节点中记录存储所述插入的好友信息的起始位置。
[0053]本发明的有益效果是:本发明中在字节数组中连续存储好友信息,在存储好友信息时,先存储各个固定长度字段,在存储各个可变长度字段,在存储可变长度字段时,先存储可变长度字段的长度,之后存储可变长度字段的内容,并且在查询节点数组中存储记录好友唯一标识和好友信息在字节数组中的起始位置的好友节点,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列;可见,通过连续存储好友信息,并且存储可变长度字段的长度,既能够实现正常的存储操作,又能够避免使用对象元数据,将用于存储对象元数据的空间节省出来,进而节省了存储开销,并且通过单独存储好友唯一标识和起始位置,并依据好友唯一标识进行排序,能够进行快速检索,提高对好友列表的操作效率。
【专利附图】

【附图说明】
[0054]图1为本发明一实施例中查询好友信息的方法的流程图。
[0055]图2为本发明一实施例中好友列表中好友信息的结构示意图。
[0056]图3为本发明一实施例中查询好友列表中好友信息的字段的方法的流程图。
[0057]图4为本发明一实施例中在好友列表中插入好友信息的方法的流程图。
[0058]图5为本发明一实施例中在好友列表中修改好友信息的方法的流程图。
[0059]图6为本发明一实施例中查询好友信息的系统的结构图。
【具体实施方式】
[0060]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0061]参见图1,为本发明一实施例中一种查询好友信息的方法的流程图。其中,包括如下步骤。
[0062]步骤S100,在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息。
[0063]其中,在存储每个好友信息时,按预设顺序存储好友信息中各个字段,预设顺序包括:先存储各个固定长度字段,之后存储各个可变长度字段;在存储可变长度字段时,先存储可变长度字段的长度,之后存储可变长度字段的内容。
[0064]步骤S200,在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列。
[0065]步骤S300,接收到查询好友信息中字段的请求时,依据所述请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置;在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段;在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段。
[0066]下面对本实施例进行示例性说明。
[0067]在存储好友信息时,对各个好友信息进行序列化。将好友信息中字段按先固定长度字段后可变长度字段的顺序进行排列,并且在可变长度字段头部添加字段的长度。并且,对于每个用户的好友列表而言,其中各个好友的好友信息中包括的字段,即信息项,相同,该些字段的排列顺序相同,并由预设顺序规定。例如,好友信息中的字段的排列的示意图如图2所示。其中,好友信息包括:m个固定长度字段和η个可变长度字段。固定长度字段即为那些固定长度类型的字段,例如数值型(整数型、长整数型、短整数型),日期型等。可变长度类型为那些长度不固定的类型的字段,例如字符串型。
[0068]为了快速检索到上述字节数组中的好友信息,建立一个索引,即查询节点数组,用以记录存储好友信息的起始位置。获得了起始位置后,便可以参照预设顺序,例如图2所示的顺序,来读取好友信息中的字段或者对好友信息中的字段做赋值等操作。
[0069]本实施例中,通过连续存储好友信息,并且存储可变长度字段的长度,既能够实现正常的存储操作,又能够避免使用对象元数据,将用于存储对象元数据的空间节省出来,进而节省了存储开销,并且通过单独存储好友唯一标识和起始位置,并依据好友唯一标识进行排序,能够进行快速检索,提闻对好友列表的操作效率。
[0070]在一实施例中,查询好友信息方法包括:按二分法在查询节点数组中查询好友节点,获取好友信息在字节数组中的起始位置;对于固定长度字段,从起始位置开始读出好友信息中固定长度字段,对于可变长度字段,读取可变长度字段中长度,按所述长度读取出可变长度字段。
[0071]参见图3,为本发明一实施例中查询好友列表的好友信息中某个字段的方法的流程图。所述方法还包括如下步骤。
[0072]步骤S310,接收到查询好友信息中字段的请求时,依据请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置。进一步地,在对查询节点数组进行查询时,可以用二分法进行查询。
[0073]步骤S320,判断待查询字段是否为固定长度字段,如果是,则执行步骤S330,否贝U,执行步骤S340。其中,待查询字段为所述请求所要查询的好友信息中的字段。
[0074]步骤S330,在待查询字段为固定长度字段时,根据预设顺序确定待查询字段之前的固定长度字段,将待查询字段之前的各个固定长度字段的长度相加得出待查询字段的偏移量,从起始位置起偏移量个字节后的位置为待查询字段的起始位置。
[0075]此处,对步骤S330进行示例性说明。从预设顺序中能够获知要查询的固定长度字段的序号,例如为第k个固定长度字段,则将之前第I个至第k-1个固定长度字段的长度相加得出该第k个固定长度字段的偏移量。从起始位置起偏移量个字节后的位置开始为要查询的字段。
[0076]步骤S340,在待查询字段为可变长度字段时,根据起始位置和所有固定长度字段的长度得出第一个可变长度字段的起始位置,根据预设顺序得出待查询字段的顺序号,从第一个可变长度字段的起始位置开始,读取可变长度字段的长度,按所述长度跳到下一个可变长度字段的起始位置,直到依据顺序号确定跳到待查询字段的起始位置为止。
[0077]此处,对步骤S340进行示例性说明。例如,查询图2中第i个可变长度字段。将所有固定长度字段的长度相加得出第一个可变长度字段的偏移量,从起始位置起该偏移量个字节后的位置中读出第一个可变长度字段的长度,按读取的长度跳到第二个可变长度字段的起始位置,如此下去。当跳过1-ι个可变长度字段后,跳到要查询的可变长度字节的起始位置,由此确定了第i个可变长度字段的起始位置,查询到第i个可变长度字段。
[0078]本实施例中,由于采用查询节点数组对以唯一标识为索引对好友信息的起始位置进行记录,其中,将唯一标识按大小排序,因而能够利用二分法对查询节点数组进行查询,从而可以快速获取好友信息的起始位置。例如,好友列表中包含100个以上的好友数据,如果用线性的搜索方式,时间复杂度是100,而二分法的时间复杂度是log2 100,即6到7次。可见,采用本实施中方法,查询速度显著提高。
[0079]在一实施例中,在删除好友信息时,从查询节点数组中删除对应的好友节点,并将删除的好友节点之后的好友节点在查询节点数组中依次前移,并将删除的好友节点放入删除节点数组中。
[0080]在采用上述删除好友信息的方式时,可以采用如下方式插入好友信息。参见图4,为本发明一实施例中在好友列表中插入好友信息的方法的流程图。所述方法包括如下步骤。
[0081]步骤S410,在插入好友信息时,生成插入的好友信息的好友节点,根据好友节点中好友唯一标识确定该好友节点在查询节点数组中的位置,将好友节点插入该位置。
[0082]对步骤S410进行示例性说明。生成一个好友节点,好友节点中ID为好友唯一标识;按二分法依据ID查找其在查询节点数组中是否存在该好友节点。如果存在,则返回插入重复的错误,即用户的好友列表中不可能有两个相同的好友。如果不存在,则返回该好友节点在查询节点数组中的插入位置,表示为insertindex。本示例中,ID排列顺序为从小到大。所以插入的好友节点的ID小于insertindex对应的好友节点的ID,并大于insertindex-Ι (若存在)对应好友节点的ID。将insertindex及之后的所有好友节点整体向后移动一个位置,再将待插入的好友节点插入到原来的insertindex位置上。
[0083]步骤S420,按预设顺序排列好友信息中的字段,在可变长度字段的内容前添加该可变长度字段的长度,以完成对好友信息的序列化操作。
[0084]在初始时删除节点数组为空时,直接执行步骤S470。字节数组中插入好友信息的起始位置,表不为blobInsertIndex,blobInsertIndex最初为O,每次插入一个新好友信息时,将好友信息从bloblnsertlndex位置整体赋值到字节数组上,然后把bloblnsertlndex加上好友信息的长度,即每次插入好友信息,直接从结尾位置整体拷贝好友信息即可。
[0085]步骤S430,查询删除节点数组,判断是否存在对应的好友信息总长度不小于所述序列化后的好友信息总长度的好友节点,如果存在,执行步骤S440,如果不存在,执行步骤S470。
[0086]步骤S440,将查询到的好友节点对应的好友信息从字节数组中删除得到空字节,在空字节中存入序列化后的好友信息。
[0087]步骤S450,在插入的好友信息在查询节点数组中的好友节点中记录存储插入的好友信息的起始位置。
[0088]步骤S460,将好友信息已经被插入好友信息替换的好友节点从删除节点数组中删除。[0089]步骤S470,从字节数组的结尾开始存储所述序列化后的好友信息,在插入的好友信息所在的好友节点中记录存储插入的好友信息的起始位置。
[0090]通过该插入方法,能够有效利用已删除的好友信息在字节数组中的空间,避免了存储空间的浪费。
[0091]参见图5,为本发明一实施例中在好友列表中修改好友信息的方法的流程图。
[0092]步骤S510,从字节数组中查询到待修改的好友信息的字段。
[0093]此处,使用前述的查询修改好友信息中字段的方法。
[0094]步骤S520,判断修改的字段是否为固定长度字段,如果是,则执行步骤S530,否贝丨J,执行步骤S540。
[0095]步骤S530,直接修改查询到的字段。
[0096]步骤S540,在待修改的字段为可变长度字段时,从查询到的字段头部读出该字段的长度,判断修改后的字段长度是否大于读取的该字段现在的长度,如果不是,则执行步骤S530,如果是,则执行步骤S550。
[0097]步骤S550,查询删除节点数组,判断是否存在对应的好友信息总长度不小于修改后的好友信息总长度的好友节点,如果存在,执行步骤S560,否则,执行步骤S570。
[0098]步骤S560,用修改后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并将好友信息已被替换的好友节点从删除节点数组中删除。
[0099]步骤S570,从字节数组的结尾开始存储所述修改后的好友信息。
[0100]步骤S580,完成修改后,将待修改的好友信息在查询节点数组中的好友节点复制,将复制的好友节点放入删除节点数组中。
[0101]步骤S590,将查询节点数组中的待修改的好友信息对应的好友节点中起始位置更新为字节数组中存储修改后的好友信息的起始位置。
[0102]通过该修改方法,能够有效利用已删除的好友信息在字节数组中的空间,避免了存储空间的浪费。
[0103]参见图6为本发明一实施例中查询好友信息的系统的结构图。
[0104]信息存储模块610,用于在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息。
[0105]其中,在存储每个好友信息时,用于按预设顺序存储好友信息中各个字段,预设顺序包括:先存储各个固定长度字段,之后存储各个可变长度字段,
[0106]在存储可变长度字段时,用于先存储可变长度字段的长度,之后存储可变长度字段的内容;
[0107]索引存储模块620,用于在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列。
[0108]所述系统还包括查询模块630,用于接收到查询好友信息中字段的请求时,依据所述请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置;在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段;在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段。[0109]本实施例中,通过连续存储好友信息,并且存储可变长度字段的长度,既能够实现正常的存储操作,又能够避免使用对象元数据,将用于存储对象元数据的空间节省出来,进而节省了存储开销,并且通过单独存储好友唯一标识和起始位置,并依据好友唯一标识进行排序,能够进行快速检索,提闻对好友列表的操作效率。
[0110]在一实施例中,查询模块630,具体用于在待查询字段为固定长度字段时,根据预设顺序确定所述待查询字段之前的固定长度字段,将待查询字段之前的各个固定长度字段的长度相加得出待查询字段的偏移量,从起始位置起偏移量个字节后的位置为待查询字段的起始位置;
[0111]在待查询字段为可变长度字段时,根据起始位置和所有固定长度字段的长度得出第一个可变长度字段的起始位置,根据预设顺序得出待查询字段的顺序号,从第一个可变长度字段的起始位置开始,读取可变长度字段的长度,按所述长度跳到下一个可变长度字段的起始位置,直到依据顺序号确定跳到待查询字段的起始位置为止。
[0112]进一步地,所述查询模块630具体用于:在查询节点数组中查询对应的好友节点时,按二分法在查询节点数组中查询对应的好友节点。
[0113]本实施例中,由于采用查询节点数组对以唯一标识为索引对好友信息的起始位置进行记录,其中,将唯一标识按大小排序,因而能够利用二分法对查询节点数组进行查询,从而可以快速获取好友信息的起始位置。例如,好友列表中包含100个以上的好友数据,如果用线性的搜索方式,时间复杂度是100,而二分法的时间复杂度是1g2 100,即6到7次。可见,采用本实施中方法,查询速度显著提高。
[0114]在一实施例中,所述系统还包括:
[0115]删除模块,用于在删除好友信息时,从查询节点数组中删除对应的好友节点,并将删除的好友节点之后的好友节点在查询节点数组中依次前移,并将删除的好友节点放入删除节点数组中。
[0116]进一步,所述系统还包括:
[0117]插入模块,用于在插入好友信息时,生成所述好友信息的好友节点,根据好友节点中好友唯一标识确定该好友节点在查询节点数组中的位置,将好友节点插入所述位置;
[0118]按预设顺序排列好友信息中的字段,在可变长度字段的内容前添加该可变长度字段的长度,以完成对好友信息的序列化操作;
[0119]查询删除节点数组,判断是否存在对应的好友信息总长度不小于所述序列化后的好友信息总长度的好友节点;
[0120]如果存在,则用所述序列化后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并在查询节点数组中的插入的好友节点中记录存储所述插入的好友信息的起始位置,将好友信息被替换的好友节点从删除节点数组中删除;
[0121]如果不存在,则从字节数组的结尾开始存储所述序列化后的好友信息,在插入的好友信息所在好友节点中记录存储插入的好友信息的起始位置。
[0122]通过该方式插入,能够有效利用已删除的好友信息在字节数组中的空间,避免了存储空间的浪费。
[0123]进一步地,所述系统还包括:
[0124]修改模块,用于在修改好友信息时,从字节数组中查询到待修改的好友信息的字段;
[0125]在待修改的字段为固定长度字段时,直接修改查询到的字段;
[0126]在待修改的字段为可变长度字段时,从查询到的字段头部读出所述字段的长度,判断修改后的字段长度是否大于读出的所述字段的长度,如果不是,则直接修改查询到的字段;
[0127]如果是,则进行如下操作:
[0128]查询删除节点数组,判断是否存在对应的好友信息总长度不小于修改后的好友信息总长度的好友节点;
[0129]如果存在,用所述修改后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并将好友信息被替换的好友节点从删除节点数组中删除;
[0130]如果不存在,则从字节数组的结尾开始存储所述修改后的好友信息;
[0131]完成修改后,将待修改的好友信息在查询节点数组中的好友节点复制,将复制的好友节点放入删除节点数组中,并将查询节点数组中的所述好友节点中起始位置更新为字节数组中存储修改后的好友信息的起始位置。
[0132]通过方式进行修改,能够有效利用已删除的好友信息在字节数组中的空间,避免了存储空间的浪费。
[0133]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【权利要求】
1.一种查询好友信息的方法,其特征在于,所述方法包括: 在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息; 在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列; 其中,在存储每个好友信息时,按预设顺序存储好友信息中各个字段,预设顺序包括:先存储各个固定长度字段,之后存储各个可变长度字段, 在存储可变长度字段时,先存储可变长度字段的长度,之后存储可变长度字段的内容; 所述方法还包括: 接收到查询好友信息中字段的请求时,依据所述请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置; 在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段; 在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段。
2.根据权利要求1所述的方法,其特征在于, 所述在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段具体包括: 在所述待查询字段为固定长度字段时,根据预设顺序确定所述待查询字段之前的固定长度字段,将待查询字段之前的各个固定长度字段的长度相加得出待查询字段的偏移量,从起始位置起偏移量个字节后的位置为待查询字段的起始位置; 所述在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段具体包括: 在所述待查询字段为可变长度字段时,根据起始位置和所有固定长度字段的长度得出第一个可变长度字段的起始位置,根据预设顺序得出待查询字段的顺序号,从第一个可变长度字段的起始位置开始,读取可变长度字段的长度,按所述长度跳到下一个可变长度字段的起始位置,直到依据顺序号确定跳到待查询字段的起始位置为止。
3.根据权利要求2所述的方法,其特征在于, 所述方法还包括: 在删除好友信息时,从查询节点数组中删除对应的好友节点,并将删除的好友节点之后的好友节点在查询节点数组中依次前移,并将删除的好友节点放入删除节点数组中。
4.根据权利要求3所述的方法,其特征在于, 所述方法还包括: 在插入好友信息时,生成所述好友信息的好友节点,根据好友节点中好友唯一标识确定该好友节点在查询节点数组中的位置,将好友节点插入所述位置; 按预设顺序排列好友信息中的字段,在可变长度字段的内容前添加该可变长度字段的长度,以完成对好友信息的序列化操作;查询删除节点数组,判断是否存在对应的好友信息总长度不小于所述序列化后的好友信息总长度的好友节点; 如果存在,则用所述序列化后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并在查询节点数组中的插入的好友节点中记录存储所述插入的好友信息的起始位置,将好友信息被替换的好友节点从删除节点数组中删除; 如果不存在,则从字节数组的结尾开始存储所述序列化后的好友信息,在插入的好友信息所在的 好友节点中记录存储所述插入的好友信息的起始位置。
5.根据权利要求3所述的方法,其特征在于, 在修改好友信息时,从字节数组中查询到待修改的好友信息的字段; 在待修改的字段为固定长度字段时,直接修改查询到的字段; 在待修改的字段为可变长度字段时,从查询到的字段头部读出所述字段的长度,判断修改后的字段长度是否大于读出的所述字段的长度,如果不是,则直接修改查询到的字段; 如果是,则进行如下操作: 查询删除节点数组,判断是否存在对应的好友信息总长度不小于修改后的好友信息总长度的好友节点; 如果存在,用所述修改后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并将好友信息被替换的好友节点从删除节点数组中删除; 如果不存在,则从字节数组的结尾开始存储所述修改后的好友信息; 完成修改后,将待修改的好友信息在查询节点数组中的好友节点复制,将复制的好友节点放入删除节点数组中,并将查询节点数组中的所述好友节点中起始位置更新为字节数组中存储修改后的好友信息的起始位置。
6.根据权利要求1所述的方法,其特征在于, 所述在查询节点数组中查询对应的好友节点包括: 按二分法在查询节点数组中查询对应的好友节点。
7.—种查询好友信息的系统,其特征在于,所述系统包括: 信息存储模块,用于在字节数组中存储好友信息,当存储完一个好友信息后,从存储所述好友信息的下一个字节开始存储另一个好友信息, 其中,在存储每个好友信息时,用于按预设顺序存储好友信息中各个字段,预设顺序包括:先存储各个固定长度字段,之后存储各个可变长度字段, 在存储可变长度字段时,用于先存储可变长度字段的长度,之后存储可变长度字段的内容; 索引存储模块,用于在查询节点数组中存储好友节点,好友节点中记录好友唯一标识和好友信息在字节数组中的起始位置,并且按好友唯一标识从大到小或从小到大的顺序将好友节点在查询节点数组中排列; 查询模块,用于接收到查询好友信息中字段的请求时,依据所述请求中携带的好友唯一标识,在查询节点数组中查询对应的好友节点,获取好友信息在字节数组中的起始位置;在待查询字段为固定长度字段时,根据固定长度字段的长度、预设顺序和起始位置得到所述待查询字段;在待查询字段为可变长度字段时,根据固定长度字段的长度、可变长度字段的长度、预设顺序和起始位置得到所述待查询字段。
8.根据权利要求7所述的系统,其特征在于, 所述查询模块,具体用于在待查询字段为固定长度字段时,根据预设顺序确定所述待查询字段之前的固定长度字段,将待查询字段之前的各个固定长度字段的长度相加得出待查询字段的偏移量,从起始位置起偏移量个字节后的位置为待查询字段的起始位置; 在待查询字段为可变长度字段时,根据起始位置和所有固定长度字段的长度得出第一个可变长度字段的起始位置,根据预设顺序得出待查询字段的顺序号,从第一个可变长度字段的起始位置开始,读取可变长度字段的长度,按所述长度跳到下一个可变长度字段的起始位置,直到依据顺序号确定跳到待查询字段的起始位置为止。
9.根据权利要求7所述的系统,其特征在于, 所述系统还包括: 删除模块,用于在删除好友信息时,从查询节点数组中删除对应的好友节点,并将删除的好友节点之后的好友节点在查询节点数组中依次前移,并将删除的好友节点放入删除节点数组中。
10.根据权利要求9所述的系统,其特征在于, 所述系统还包括: 插入模块,用于在插入好友信息时,生成所述好友信息的好友节点,根据好友节点中好友唯一标识确定该好友节点在查询节点数组中的位置,将好友节点插入所述位置; 按预设顺序排列好友信息中的字段,在可变长度字段的内容前添加该可变长度字段的长度,以完成对好友信息的序列化操作; 查询删除节点数组,判断是否存在对应的好友信息总长度不小于所述序列化后的好友信息总长度的好友节点; 如果存在,则用所述序列化后的好友信息替换所述查询到的好友节点在字节数组中的好友信息,并在查询节点数组中的插入的好友节点中记录存储所述插入的好友信息的起始位置,将好友信息被替换的好友节点从删除节点数组中删除; 如果不存在,则从字节数组的结尾开始存储所述序列化后的好友信息,在插入的好友信息所在的好友节点中记录存储所述插入的好友信息的起始位置。
【文档编号】G06F17/30GK103838760SQ201210484514
【公开日】2014年6月4日 申请日期:2012年11月23日 优先权日:2012年11月23日
【发明者】王洪泽 申请人:北京神州泰岳软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1