欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種查詢(xún)好友信息的方法和系統(tǒng)的制作方法

文檔序號(hào):6491563閱讀:258來(lái)源:國(guó)知局
一種查詢(xún)好友信息的方法和系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)一種查詢(xún)好友信息的方法和系統(tǒng),所述方法包括:在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息;在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列;接收到查詢(xún)好友信息中字段請(qǐng)求時(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;根據(jù)起始位置和字段長(zhǎng)度查詢(xún)字段。本發(fā)明能夠解決存儲(chǔ)好友列表占用存儲(chǔ)空間過(guò)大的問(wèn)題。
【專(zhuān)利說(shuō)明】一種查詢(xún)好友信息的方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及一種查詢(xún)好友信息的方法和系統(tǒng)。
【背景技術(shù)】
[0002]即時(shí)通訊工具中,用戶(hù)的數(shù)據(jù)占用了大量的內(nèi)存存儲(chǔ),用戶(hù)的數(shù)據(jù)中包含用戶(hù)狀態(tài)數(shù)據(jù)和用戶(hù)的好友列表。特別是好友列表,在線活躍用戶(hù)的平均好友數(shù)超過(guò)100個(gè),每個(gè)用戶(hù)平均要緩存100個(gè)好友的數(shù)據(jù),好友的數(shù)據(jù)包括:好友唯一標(biāo)識(shí)ID,好友分組,好友昵稱(chēng)等等常用屬性。
[0003]現(xiàn)有技術(shù)中,通過(guò)字典(哈希表)的方法保存好友列表。其中,以好友的唯一標(biāo)識(shí)ID作為Key (關(guān)鍵碼),好友信息的內(nèi)容作為值(Value)來(lái)存儲(chǔ)。采用現(xiàn)有技術(shù)中的方法,存儲(chǔ)一個(gè)100好友的用戶(hù)至少需要存100個(gè)key和100個(gè)好友對(duì)象。此外,對(duì)于每個(gè)好友還需要緩存該好友的對(duì)象元數(shù)據(jù),對(duì)象元數(shù)據(jù)為系統(tǒng)為對(duì)好友列表進(jìn)行操作而維護(hù)的大量操作信息數(shù)據(jù),例如,指針,頭信息等數(shù)據(jù)。此對(duì)象元數(shù)據(jù)帶來(lái)了許多額外的存儲(chǔ)開(kāi)銷(xiāo),一個(gè)用戶(hù)大概需要22KB的內(nèi)存。如此,緩存300萬(wàn)個(gè)在線用戶(hù),則需要60GB左右的內(nèi)存。
[0004]可見(jiàn),現(xiàn)有技術(shù)中存儲(chǔ)好友列表的技術(shù)方案存在占用存儲(chǔ)空間過(guò)大的問(wèn)題。

【發(fā)明內(nèi)容】

[0005]本發(fā)明提供了一種查詢(xún)好友信息的方法和系統(tǒng),以解決存儲(chǔ)好友列表占用存儲(chǔ)空間過(guò)大的問(wèn)題。
[0006]本發(fā)明公開(kāi)了一種查詢(xún)好友信息的方法,所述方法包括:
[0007]在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息;
[0008]在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列;
[0009]其中,在存儲(chǔ)每個(gè)好友信息時(shí),按預(yù)設(shè)順序存儲(chǔ)好友信息中各個(gè)字段,預(yù)設(shè)順序包括:先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,之后存儲(chǔ)各個(gè)可變長(zhǎng)度字段,
[0010]在存儲(chǔ)可變長(zhǎng)度字段時(shí),先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容;
[0011]所述方法還包括:
[0012]接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)所述請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;
[0013]在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段;
[0014]在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段。[0015]其中,所述在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段具體包括:
[0016]在所述待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)預(yù)設(shè)順序確定所述待查詢(xún)字段之前的固定長(zhǎng)度字段,將待查詢(xún)字段之前的各個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出待查詢(xún)字段的偏移量,從起始位置起偏移量個(gè)字節(jié)后的位置為待查詢(xún)字段的起始位置;
[0017]所述在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段具體包括:
[0018]在所述待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)起始位置和所有固定長(zhǎng)度字段的長(zhǎng)度得出第一個(gè)可變長(zhǎng)度字段的起始位置,根據(jù)預(yù)設(shè)順序得出待查詢(xún)字段的順序號(hào),從第一個(gè)可變長(zhǎng)度字段的起始位置開(kāi)始,讀取可變長(zhǎng)度字段的長(zhǎng)度,按所述長(zhǎng)度跳到下一個(gè)可變長(zhǎng)度字段的起始位置,直到依據(jù)順序號(hào)確定跳到待查詢(xún)字段的起始位置為止。
[0019]其中,所述方法還包括:
[0020]在刪除好友信息時(shí),從查詢(xún)節(jié)點(diǎn)數(shù)組中刪除對(duì)應(yīng)的好友節(jié)點(diǎn),并將刪除的好友節(jié)點(diǎn)之后的好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中依次前移,并將刪除的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
[0021]其中,所述方法還包括:
[0022]在插入好友信息時(shí),生成所述好友信息的好友節(jié)點(diǎn),根據(jù)好友節(jié)點(diǎn)中好友唯一標(biāo)識(shí)確定該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的位置,將好友節(jié)點(diǎn)插入所述位置;
[0023]按預(yù)設(shè)順序排列好友信息中的字段,在可變長(zhǎng)度字段的內(nèi)容前添加該可變長(zhǎng)度字段的長(zhǎng)度,以完成對(duì)好友信息的序列化操作;
[0024]查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于所述序列化后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn);
[0025]如果存在,則用所述序列化后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并在查詢(xún)節(jié)點(diǎn)數(shù)組中的插入的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置,將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除;
[0026]如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述序列化后的好友信息,在插入的好友信息所在的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置。
[0027]其中,在修改好友信息時(shí),從字節(jié)數(shù)組中查詢(xún)到待修改的好友信息的字段;
[0028]在待修改的字段為固定長(zhǎng)度字段時(shí),直接修改查詢(xún)到的字段;
[0029]在待修改的字段為可變長(zhǎng)度字段時(shí),從查詢(xún)到的字段頭部讀出所述字段的長(zhǎng)度,判斷修改后的字段長(zhǎng)度是否大于讀出的所述字段的長(zhǎng)度,如果不是,則直接修改查詢(xún)到的字段;
[0030]如果是,則進(jìn)行如下操作:
[0031]查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于修改后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn);
[0032]如果存在,用所述修改后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除;
[0033]如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述修改后的好友信息;
[0034]完成修改后,將待修改的好友信息在查詢(xún)節(jié)點(diǎn)數(shù)組中的好友節(jié)點(diǎn)復(fù)制,將復(fù)制的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中,并將查詢(xún)節(jié)點(diǎn)數(shù)組中的所述好友節(jié)點(diǎn)中起始位置更新為字節(jié)數(shù)組中存儲(chǔ)修改后的好友信息的起始位置。
[0035]其中,所述在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn)包括:
[0036]按二分法在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn)。
[0037]本發(fā)明還公開(kāi)了一種查詢(xún)好友信息的系統(tǒng),所述系統(tǒng)包括:
[0038]信息存儲(chǔ)模塊,用于在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息,
[0039]其中,在存儲(chǔ)每個(gè)好友信息時(shí),用于按預(yù)設(shè)順序存儲(chǔ)好友信息中各個(gè)字段,預(yù)設(shè)順序包括:先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,之后存儲(chǔ)各個(gè)可變長(zhǎng)度字段,
[0040]在存儲(chǔ)可變長(zhǎng)度字段時(shí),用于先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容;
[0041 ] 索引存儲(chǔ)模塊,用于在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列;
[0042]查詢(xún)模塊,用于接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)所述請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段;在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段。
[0043]其中,所述查詢(xún)模塊,具體用于在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)預(yù)設(shè)順序確定所述待查詢(xún)字段之前的固定長(zhǎng)度字段,將待查詢(xún)字段之前的各個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出待查詢(xún)字段的偏移量,從起始位置起偏移量個(gè)字節(jié)后的位置為待查詢(xún)字段的起始位置;
[0044]在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)起始位置和所有固定長(zhǎng)度字段的長(zhǎng)度得出第一個(gè)可變長(zhǎng)度字段的起始位置,根據(jù)預(yù)設(shè)順序得出待查詢(xún)字段的順序號(hào),從第一個(gè)可變長(zhǎng)度字段的起始位置開(kāi)始,讀取可變長(zhǎng)度字段的長(zhǎng)度,按所述長(zhǎng)度跳到下一個(gè)可變長(zhǎng)度字段的起始位置,直到依據(jù)順序號(hào)確定跳到待查詢(xún)字段的起始位置為止。
[0045]其中,所述系統(tǒng)還包括:
[0046]刪除模塊,用于在刪除好友信息時(shí),從查詢(xún)節(jié)點(diǎn)數(shù)組中刪除對(duì)應(yīng)的好友節(jié)點(diǎn),并將刪除的好友節(jié)點(diǎn)之后的好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中依次前移,并將刪除的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
[0047]其中,所述系統(tǒng)還包括:
[0048]插入模塊,用于在插入好友信息時(shí),生成所述好友信息的好友節(jié)點(diǎn),根據(jù)好友節(jié)點(diǎn)中好友唯一標(biāo)識(shí)確定該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的位置,將好友節(jié)點(diǎn)插入所述位置;
[0049]按預(yù)設(shè)順序排列好友信息中的字段,在可變長(zhǎng)度字段的內(nèi)容前添加該可變長(zhǎng)度字段的長(zhǎng)度,以完成對(duì)好友信息的序列化操作;
[0050]查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于所述序列化后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn);
[0051]如果存在,則用所述序列化后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并在查詢(xún)節(jié)點(diǎn)數(shù)組中的插入的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置,將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除;
[0052]如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述序列化后的好友信息,在插入的好友信息所在的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置。
[0053]本發(fā)明的有益效果是:本發(fā)明中在字節(jié)數(shù)組中連續(xù)存儲(chǔ)好友信息,在存儲(chǔ)好友信息時(shí),先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,在存儲(chǔ)各個(gè)可變長(zhǎng)度字段,在存儲(chǔ)可變長(zhǎng)度字段時(shí),先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容,并且在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置的好友節(jié)點(diǎn),并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列;可見(jiàn),通過(guò)連續(xù)存儲(chǔ)好友信息,并且存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,既能夠?qū)崿F(xiàn)正常的存儲(chǔ)操作,又能夠避免使用對(duì)象元數(shù)據(jù),將用于存儲(chǔ)對(duì)象元數(shù)據(jù)的空間節(jié)省出來(lái),進(jìn)而節(jié)省了存儲(chǔ)開(kāi)銷(xiāo),并且通過(guò)單獨(dú)存儲(chǔ)好友唯一標(biāo)識(shí)和起始位置,并依據(jù)好友唯一標(biāo)識(shí)進(jìn)行排序,能夠進(jìn)行快速檢索,提高對(duì)好友列表的操作效率。
【專(zhuān)利附圖】

【附圖說(shuō)明】
[0054]圖1為本發(fā)明一實(shí)施例中查詢(xún)好友信息的方法的流程圖。
[0055]圖2為本發(fā)明一實(shí)施例中好友列表中好友信息的結(jié)構(gòu)示意圖。
[0056]圖3為本發(fā)明一實(shí)施例中查詢(xún)好友列表中好友信息的字段的方法的流程圖。
[0057]圖4為本發(fā)明一實(shí)施例中在好友列表中插入好友信息的方法的流程圖。
[0058]圖5為本發(fā)明一實(shí)施例中在好友列表中修改好友信息的方法的流程圖。
[0059]圖6為本發(fā)明一實(shí)施例中查詢(xún)好友信息的系統(tǒng)的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0060]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
[0061]參見(jiàn)圖1,為本發(fā)明一實(shí)施例中一種查詢(xún)好友信息的方法的流程圖。其中,包括如下步驟。
[0062]步驟S100,在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息。
[0063]其中,在存儲(chǔ)每個(gè)好友信息時(shí),按預(yù)設(shè)順序存儲(chǔ)好友信息中各個(gè)字段,預(yù)設(shè)順序包括:先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,之后存儲(chǔ)各個(gè)可變長(zhǎng)度字段;在存儲(chǔ)可變長(zhǎng)度字段時(shí),先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容。
[0064]步驟S200,在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列。
[0065]步驟S300,接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)所述請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段;在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段。
[0066]下面對(duì)本實(shí)施例進(jìn)行示例性說(shuō)明。
[0067]在存儲(chǔ)好友信息時(shí),對(duì)各個(gè)好友信息進(jìn)行序列化。將好友信息中字段按先固定長(zhǎng)度字段后可變長(zhǎng)度字段的順序進(jìn)行排列,并且在可變長(zhǎng)度字段頭部添加字段的長(zhǎng)度。并且,對(duì)于每個(gè)用戶(hù)的好友列表而言,其中各個(gè)好友的好友信息中包括的字段,即信息項(xiàng),相同,該些字段的排列順序相同,并由預(yù)設(shè)順序規(guī)定。例如,好友信息中的字段的排列的示意圖如圖2所示。其中,好友信息包括:m個(gè)固定長(zhǎng)度字段和η個(gè)可變長(zhǎng)度字段。固定長(zhǎng)度字段即為那些固定長(zhǎng)度類(lèi)型的字段,例如數(shù)值型(整數(shù)型、長(zhǎng)整數(shù)型、短整數(shù)型),日期型等。可變長(zhǎng)度類(lèi)型為那些長(zhǎng)度不固定的類(lèi)型的字段,例如字符串型。
[0068]為了快速檢索到上述字節(jié)數(shù)組中的好友信息,建立一個(gè)索引,即查詢(xún)節(jié)點(diǎn)數(shù)組,用以記錄存儲(chǔ)好友信息的起始位置。獲得了起始位置后,便可以參照預(yù)設(shè)順序,例如圖2所示的順序,來(lái)讀取好友信息中的字段或者對(duì)好友信息中的字段做賦值等操作。
[0069]本實(shí)施例中,通過(guò)連續(xù)存儲(chǔ)好友信息,并且存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,既能夠?qū)崿F(xiàn)正常的存儲(chǔ)操作,又能夠避免使用對(duì)象元數(shù)據(jù),將用于存儲(chǔ)對(duì)象元數(shù)據(jù)的空間節(jié)省出來(lái),進(jìn)而節(jié)省了存儲(chǔ)開(kāi)銷(xiāo),并且通過(guò)單獨(dú)存儲(chǔ)好友唯一標(biāo)識(shí)和起始位置,并依據(jù)好友唯一標(biāo)識(shí)進(jìn)行排序,能夠進(jìn)行快速檢索,提聞對(duì)好友列表的操作效率。
[0070]在一實(shí)施例中,查詢(xún)好友信息方法包括:按二分法在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;對(duì)于固定長(zhǎng)度字段,從起始位置開(kāi)始讀出好友信息中固定長(zhǎng)度字段,對(duì)于可變長(zhǎng)度字段,讀取可變長(zhǎng)度字段中長(zhǎng)度,按所述長(zhǎng)度讀取出可變長(zhǎng)度字段。
[0071]參見(jiàn)圖3,為本發(fā)明一實(shí)施例中查詢(xún)好友列表的好友信息中某個(gè)字段的方法的流程圖。所述方法還包括如下步驟。
[0072]步驟S310,接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置。進(jìn)一步地,在對(duì)查詢(xún)節(jié)點(diǎn)數(shù)組進(jìn)行查詢(xún)時(shí),可以用二分法進(jìn)行查詢(xún)。
[0073]步驟S320,判斷待查詢(xún)字段是否為固定長(zhǎng)度字段,如果是,則執(zhí)行步驟S330,否貝U,執(zhí)行步驟S340。其中,待查詢(xún)字段為所述請(qǐng)求所要查詢(xún)的好友信息中的字段。
[0074]步驟S330,在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)預(yù)設(shè)順序確定待查詢(xún)字段之前的固定長(zhǎng)度字段,將待查詢(xún)字段之前的各個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出待查詢(xún)字段的偏移量,從起始位置起偏移量個(gè)字節(jié)后的位置為待查詢(xún)字段的起始位置。
[0075]此處,對(duì)步驟S330進(jìn)行示例性說(shuō)明。從預(yù)設(shè)順序中能夠獲知要查詢(xún)的固定長(zhǎng)度字段的序號(hào),例如為第k個(gè)固定長(zhǎng)度字段,則將之前第I個(gè)至第k-1個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出該第k個(gè)固定長(zhǎng)度字段的偏移量。從起始位置起偏移量個(gè)字節(jié)后的位置開(kāi)始為要查詢(xún)的字段。
[0076]步驟S340,在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)起始位置和所有固定長(zhǎng)度字段的長(zhǎng)度得出第一個(gè)可變長(zhǎng)度字段的起始位置,根據(jù)預(yù)設(shè)順序得出待查詢(xún)字段的順序號(hào),從第一個(gè)可變長(zhǎng)度字段的起始位置開(kāi)始,讀取可變長(zhǎng)度字段的長(zhǎng)度,按所述長(zhǎng)度跳到下一個(gè)可變長(zhǎng)度字段的起始位置,直到依據(jù)順序號(hào)確定跳到待查詢(xún)字段的起始位置為止。
[0077]此處,對(duì)步驟S340進(jìn)行示例性說(shuō)明。例如,查詢(xún)圖2中第i個(gè)可變長(zhǎng)度字段。將所有固定長(zhǎng)度字段的長(zhǎng)度相加得出第一個(gè)可變長(zhǎng)度字段的偏移量,從起始位置起該偏移量個(gè)字節(jié)后的位置中讀出第一個(gè)可變長(zhǎng)度字段的長(zhǎng)度,按讀取的長(zhǎng)度跳到第二個(gè)可變長(zhǎng)度字段的起始位置,如此下去。當(dāng)跳過(guò)1-ι個(gè)可變長(zhǎng)度字段后,跳到要查詢(xún)的可變長(zhǎng)度字節(jié)的起始位置,由此確定了第i個(gè)可變長(zhǎng)度字段的起始位置,查詢(xún)到第i個(gè)可變長(zhǎng)度字段。
[0078]本實(shí)施例中,由于采用查詢(xún)節(jié)點(diǎn)數(shù)組對(duì)以唯一標(biāo)識(shí)為索引對(duì)好友信息的起始位置進(jìn)行記錄,其中,將唯一標(biāo)識(shí)按大小排序,因而能夠利用二分法對(duì)查詢(xún)節(jié)點(diǎn)數(shù)組進(jìn)行查詢(xún),從而可以快速獲取好友信息的起始位置。例如,好友列表中包含100個(gè)以上的好友數(shù)據(jù),如果用線性的搜索方式,時(shí)間復(fù)雜度是100,而二分法的時(shí)間復(fù)雜度是log2 100,即6到7次。可見(jiàn),采用本實(shí)施中方法,查詢(xún)速度顯著提高。
[0079]在一實(shí)施例中,在刪除好友信息時(shí),從查詢(xún)節(jié)點(diǎn)數(shù)組中刪除對(duì)應(yīng)的好友節(jié)點(diǎn),并將刪除的好友節(jié)點(diǎn)之后的好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中依次前移,并將刪除的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
[0080]在采用上述刪除好友信息的方式時(shí),可以采用如下方式插入好友信息。參見(jiàn)圖4,為本發(fā)明一實(shí)施例中在好友列表中插入好友信息的方法的流程圖。所述方法包括如下步驟。
[0081]步驟S410,在插入好友信息時(shí),生成插入的好友信息的好友節(jié)點(diǎn),根據(jù)好友節(jié)點(diǎn)中好友唯一標(biāo)識(shí)確定該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的位置,將好友節(jié)點(diǎn)插入該位置。
[0082]對(duì)步驟S410進(jìn)行示例性說(shuō)明。生成一個(gè)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中ID為好友唯一標(biāo)識(shí);按二分法依據(jù)ID查找其在查詢(xún)節(jié)點(diǎn)數(shù)組中是否存在該好友節(jié)點(diǎn)。如果存在,則返回插入重復(fù)的錯(cuò)誤,即用戶(hù)的好友列表中不可能有兩個(gè)相同的好友。如果不存在,則返回該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的插入位置,表示為insertindex。本示例中,ID排列順序?yàn)閺男〉酱?。所以插入的好友?jié)點(diǎn)的ID小于insertindex對(duì)應(yīng)的好友節(jié)點(diǎn)的ID,并大于insertindex-Ι (若存在)對(duì)應(yīng)好友節(jié)點(diǎn)的ID。將insertindex及之后的所有好友節(jié)點(diǎn)整體向后移動(dòng)一個(gè)位置,再將待插入的好友節(jié)點(diǎn)插入到原來(lái)的insertindex位置上。
[0083]步驟S420,按預(yù)設(shè)順序排列好友信息中的字段,在可變長(zhǎng)度字段的內(nèi)容前添加該可變長(zhǎng)度字段的長(zhǎng)度,以完成對(duì)好友信息的序列化操作。
[0084]在初始時(shí)刪除節(jié)點(diǎn)數(shù)組為空時(shí),直接執(zhí)行步驟S470。字節(jié)數(shù)組中插入好友信息的起始位置,表不為blobInsertIndex,blobInsertIndex最初為O,每次插入一個(gè)新好友信息時(shí),將好友信息從bloblnsertlndex位置整體賦值到字節(jié)數(shù)組上,然后把bloblnsertlndex加上好友信息的長(zhǎng)度,即每次插入好友信息,直接從結(jié)尾位置整體拷貝好友信息即可。
[0085]步驟S430,查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于所述序列化后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn),如果存在,執(zhí)行步驟S440,如果不存在,執(zhí)行步驟S470。
[0086]步驟S440,將查詢(xún)到的好友節(jié)點(diǎn)對(duì)應(yīng)的好友信息從字節(jié)數(shù)組中刪除得到空字節(jié),在空字節(jié)中存入序列化后的好友信息。
[0087]步驟S450,在插入的好友信息在查詢(xún)節(jié)點(diǎn)數(shù)組中的好友節(jié)點(diǎn)中記錄存儲(chǔ)插入的好友信息的起始位置。
[0088]步驟S460,將好友信息已經(jīng)被插入好友信息替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除。[0089]步驟S470,從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述序列化后的好友信息,在插入的好友信息所在的好友節(jié)點(diǎn)中記錄存儲(chǔ)插入的好友信息的起始位置。
[0090]通過(guò)該插入方法,能夠有效利用已刪除的好友信息在字節(jié)數(shù)組中的空間,避免了存儲(chǔ)空間的浪費(fèi)。
[0091]參見(jiàn)圖5,為本發(fā)明一實(shí)施例中在好友列表中修改好友信息的方法的流程圖。
[0092]步驟S510,從字節(jié)數(shù)組中查詢(xún)到待修改的好友信息的字段。
[0093]此處,使用前述的查詢(xún)修改好友信息中字段的方法。
[0094]步驟S520,判斷修改的字段是否為固定長(zhǎng)度字段,如果是,則執(zhí)行步驟S530,否貝丨J,執(zhí)行步驟S540。
[0095]步驟S530,直接修改查詢(xún)到的字段。
[0096]步驟S540,在待修改的字段為可變長(zhǎng)度字段時(shí),從查詢(xún)到的字段頭部讀出該字段的長(zhǎng)度,判斷修改后的字段長(zhǎng)度是否大于讀取的該字段現(xiàn)在的長(zhǎng)度,如果不是,則執(zhí)行步驟S530,如果是,則執(zhí)行步驟S550。
[0097]步驟S550,查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于修改后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn),如果存在,執(zhí)行步驟S560,否則,執(zhí)行步驟S570。
[0098]步驟S560,用修改后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并將好友信息已被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除。
[0099]步驟S570,從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述修改后的好友信息。
[0100]步驟S580,完成修改后,將待修改的好友信息在查詢(xún)節(jié)點(diǎn)數(shù)組中的好友節(jié)點(diǎn)復(fù)制,將復(fù)制的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
[0101]步驟S590,將查詢(xún)節(jié)點(diǎn)數(shù)組中的待修改的好友信息對(duì)應(yīng)的好友節(jié)點(diǎn)中起始位置更新為字節(jié)數(shù)組中存儲(chǔ)修改后的好友信息的起始位置。
[0102]通過(guò)該修改方法,能夠有效利用已刪除的好友信息在字節(jié)數(shù)組中的空間,避免了存儲(chǔ)空間的浪費(fèi)。
[0103]參見(jiàn)圖6為本發(fā)明一實(shí)施例中查詢(xún)好友信息的系統(tǒng)的結(jié)構(gòu)圖。
[0104]信息存儲(chǔ)模塊610,用于在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息。
[0105]其中,在存儲(chǔ)每個(gè)好友信息時(shí),用于按預(yù)設(shè)順序存儲(chǔ)好友信息中各個(gè)字段,預(yù)設(shè)順序包括:先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,之后存儲(chǔ)各個(gè)可變長(zhǎng)度字段,
[0106]在存儲(chǔ)可變長(zhǎng)度字段時(shí),用于先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容;
[0107]索引存儲(chǔ)模塊620,用于在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列。
[0108]所述系統(tǒng)還包括查詢(xún)模塊630,用于接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)所述請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段;在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段。[0109]本實(shí)施例中,通過(guò)連續(xù)存儲(chǔ)好友信息,并且存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,既能夠?qū)崿F(xiàn)正常的存儲(chǔ)操作,又能夠避免使用對(duì)象元數(shù)據(jù),將用于存儲(chǔ)對(duì)象元數(shù)據(jù)的空間節(jié)省出來(lái),進(jìn)而節(jié)省了存儲(chǔ)開(kāi)銷(xiāo),并且通過(guò)單獨(dú)存儲(chǔ)好友唯一標(biāo)識(shí)和起始位置,并依據(jù)好友唯一標(biāo)識(shí)進(jìn)行排序,能夠進(jìn)行快速檢索,提聞對(duì)好友列表的操作效率。
[0110]在一實(shí)施例中,查詢(xún)模塊630,具體用于在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)預(yù)設(shè)順序確定所述待查詢(xún)字段之前的固定長(zhǎng)度字段,將待查詢(xún)字段之前的各個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出待查詢(xún)字段的偏移量,從起始位置起偏移量個(gè)字節(jié)后的位置為待查詢(xún)字段的起始位置;
[0111]在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)起始位置和所有固定長(zhǎng)度字段的長(zhǎng)度得出第一個(gè)可變長(zhǎng)度字段的起始位置,根據(jù)預(yù)設(shè)順序得出待查詢(xún)字段的順序號(hào),從第一個(gè)可變長(zhǎng)度字段的起始位置開(kāi)始,讀取可變長(zhǎng)度字段的長(zhǎng)度,按所述長(zhǎng)度跳到下一個(gè)可變長(zhǎng)度字段的起始位置,直到依據(jù)順序號(hào)確定跳到待查詢(xún)字段的起始位置為止。
[0112]進(jìn)一步地,所述查詢(xún)模塊630具體用于:在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn)時(shí),按二分法在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn)。
[0113]本實(shí)施例中,由于采用查詢(xún)節(jié)點(diǎn)數(shù)組對(duì)以唯一標(biāo)識(shí)為索引對(duì)好友信息的起始位置進(jìn)行記錄,其中,將唯一標(biāo)識(shí)按大小排序,因而能夠利用二分法對(duì)查詢(xún)節(jié)點(diǎn)數(shù)組進(jìn)行查詢(xún),從而可以快速獲取好友信息的起始位置。例如,好友列表中包含100個(gè)以上的好友數(shù)據(jù),如果用線性的搜索方式,時(shí)間復(fù)雜度是100,而二分法的時(shí)間復(fù)雜度是1g2 100,即6到7次。可見(jiàn),采用本實(shí)施中方法,查詢(xún)速度顯著提高。
[0114]在一實(shí)施例中,所述系統(tǒng)還包括:
[0115]刪除模塊,用于在刪除好友信息時(shí),從查詢(xún)節(jié)點(diǎn)數(shù)組中刪除對(duì)應(yīng)的好友節(jié)點(diǎn),并將刪除的好友節(jié)點(diǎn)之后的好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中依次前移,并將刪除的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
[0116]進(jìn)一步,所述系統(tǒng)還包括:
[0117]插入模塊,用于在插入好友信息時(shí),生成所述好友信息的好友節(jié)點(diǎn),根據(jù)好友節(jié)點(diǎn)中好友唯一標(biāo)識(shí)確定該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的位置,將好友節(jié)點(diǎn)插入所述位置;
[0118]按預(yù)設(shè)順序排列好友信息中的字段,在可變長(zhǎng)度字段的內(nèi)容前添加該可變長(zhǎng)度字段的長(zhǎng)度,以完成對(duì)好友信息的序列化操作;
[0119]查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于所述序列化后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn);
[0120]如果存在,則用所述序列化后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并在查詢(xún)節(jié)點(diǎn)數(shù)組中的插入的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置,將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除;
[0121]如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述序列化后的好友信息,在插入的好友信息所在好友節(jié)點(diǎn)中記錄存儲(chǔ)插入的好友信息的起始位置。
[0122]通過(guò)該方式插入,能夠有效利用已刪除的好友信息在字節(jié)數(shù)組中的空間,避免了存儲(chǔ)空間的浪費(fèi)。
[0123]進(jìn)一步地,所述系統(tǒng)還包括:
[0124]修改模塊,用于在修改好友信息時(shí),從字節(jié)數(shù)組中查詢(xún)到待修改的好友信息的字段;
[0125]在待修改的字段為固定長(zhǎng)度字段時(shí),直接修改查詢(xún)到的字段;
[0126]在待修改的字段為可變長(zhǎng)度字段時(shí),從查詢(xún)到的字段頭部讀出所述字段的長(zhǎng)度,判斷修改后的字段長(zhǎng)度是否大于讀出的所述字段的長(zhǎng)度,如果不是,則直接修改查詢(xún)到的字段;
[0127]如果是,則進(jìn)行如下操作:
[0128]查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于修改后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn);
[0129]如果存在,用所述修改后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除;
[0130]如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述修改后的好友信息;
[0131]完成修改后,將待修改的好友信息在查詢(xún)節(jié)點(diǎn)數(shù)組中的好友節(jié)點(diǎn)復(fù)制,將復(fù)制的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中,并將查詢(xún)節(jié)點(diǎn)數(shù)組中的所述好友節(jié)點(diǎn)中起始位置更新為字節(jié)數(shù)組中存儲(chǔ)修改后的好友信息的起始位置。
[0132]通過(guò)方式進(jìn)行修改,能夠有效利用已刪除的好友信息在字節(jié)數(shù)組中的空間,避免了存儲(chǔ)空間的浪費(fèi)。
[0133]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種查詢(xún)好友信息的方法,其特征在于,所述方法包括: 在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息; 在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列; 其中,在存儲(chǔ)每個(gè)好友信息時(shí),按預(yù)設(shè)順序存儲(chǔ)好友信息中各個(gè)字段,預(yù)設(shè)順序包括:先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,之后存儲(chǔ)各個(gè)可變長(zhǎng)度字段, 在存儲(chǔ)可變長(zhǎng)度字段時(shí),先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容; 所述方法還包括: 接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)所述請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置; 在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段; 在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段具體包括: 在所述待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)預(yù)設(shè)順序確定所述待查詢(xún)字段之前的固定長(zhǎng)度字段,將待查詢(xún)字段之前的各個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出待查詢(xún)字段的偏移量,從起始位置起偏移量個(gè)字節(jié)后的位置為待查詢(xún)字段的起始位置; 所述在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段具體包括: 在所述待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)起始位置和所有固定長(zhǎng)度字段的長(zhǎng)度得出第一個(gè)可變長(zhǎng)度字段的起始位置,根據(jù)預(yù)設(shè)順序得出待查詢(xún)字段的順序號(hào),從第一個(gè)可變長(zhǎng)度字段的起始位置開(kāi)始,讀取可變長(zhǎng)度字段的長(zhǎng)度,按所述長(zhǎng)度跳到下一個(gè)可變長(zhǎng)度字段的起始位置,直到依據(jù)順序號(hào)確定跳到待查詢(xún)字段的起始位置為止。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于, 所述方法還包括: 在刪除好友信息時(shí),從查詢(xún)節(jié)點(diǎn)數(shù)組中刪除對(duì)應(yīng)的好友節(jié)點(diǎn),并將刪除的好友節(jié)點(diǎn)之后的好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中依次前移,并將刪除的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于, 所述方法還包括: 在插入好友信息時(shí),生成所述好友信息的好友節(jié)點(diǎn),根據(jù)好友節(jié)點(diǎn)中好友唯一標(biāo)識(shí)確定該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的位置,將好友節(jié)點(diǎn)插入所述位置; 按預(yù)設(shè)順序排列好友信息中的字段,在可變長(zhǎng)度字段的內(nèi)容前添加該可變長(zhǎng)度字段的長(zhǎng)度,以完成對(duì)好友信息的序列化操作;查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于所述序列化后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn); 如果存在,則用所述序列化后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并在查詢(xún)節(jié)點(diǎn)數(shù)組中的插入的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置,將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除; 如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述序列化后的好友信息,在插入的好友信息所在的 好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于, 在修改好友信息時(shí),從字節(jié)數(shù)組中查詢(xún)到待修改的好友信息的字段; 在待修改的字段為固定長(zhǎng)度字段時(shí),直接修改查詢(xún)到的字段; 在待修改的字段為可變長(zhǎng)度字段時(shí),從查詢(xún)到的字段頭部讀出所述字段的長(zhǎng)度,判斷修改后的字段長(zhǎng)度是否大于讀出的所述字段的長(zhǎng)度,如果不是,則直接修改查詢(xún)到的字段; 如果是,則進(jìn)行如下操作: 查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于修改后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn); 如果存在,用所述修改后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除; 如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述修改后的好友信息; 完成修改后,將待修改的好友信息在查詢(xún)節(jié)點(diǎn)數(shù)組中的好友節(jié)點(diǎn)復(fù)制,將復(fù)制的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中,并將查詢(xún)節(jié)點(diǎn)數(shù)組中的所述好友節(jié)點(diǎn)中起始位置更新為字節(jié)數(shù)組中存儲(chǔ)修改后的好友信息的起始位置。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn)包括: 按二分法在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn)。
7.—種查詢(xún)好友信息的系統(tǒng),其特征在于,所述系統(tǒng)包括: 信息存儲(chǔ)模塊,用于在字節(jié)數(shù)組中存儲(chǔ)好友信息,當(dāng)存儲(chǔ)完一個(gè)好友信息后,從存儲(chǔ)所述好友信息的下一個(gè)字節(jié)開(kāi)始存儲(chǔ)另一個(gè)好友信息, 其中,在存儲(chǔ)每個(gè)好友信息時(shí),用于按預(yù)設(shè)順序存儲(chǔ)好友信息中各個(gè)字段,預(yù)設(shè)順序包括:先存儲(chǔ)各個(gè)固定長(zhǎng)度字段,之后存儲(chǔ)各個(gè)可變長(zhǎng)度字段, 在存儲(chǔ)可變長(zhǎng)度字段時(shí),用于先存儲(chǔ)可變長(zhǎng)度字段的長(zhǎng)度,之后存儲(chǔ)可變長(zhǎng)度字段的內(nèi)容; 索引存儲(chǔ)模塊,用于在查詢(xún)節(jié)點(diǎn)數(shù)組中存儲(chǔ)好友節(jié)點(diǎn),好友節(jié)點(diǎn)中記錄好友唯一標(biāo)識(shí)和好友信息在字節(jié)數(shù)組中的起始位置,并且按好友唯一標(biāo)識(shí)從大到小或從小到大的順序?qū)⒑糜压?jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中排列; 查詢(xún)模塊,用于接收到查詢(xún)好友信息中字段的請(qǐng)求時(shí),依據(jù)所述請(qǐng)求中攜帶的好友唯一標(biāo)識(shí),在查詢(xún)節(jié)點(diǎn)數(shù)組中查詢(xún)對(duì)應(yīng)的好友節(jié)點(diǎn),獲取好友信息在字節(jié)數(shù)組中的起始位置;在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段;在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)固定長(zhǎng)度字段的長(zhǎng)度、可變長(zhǎng)度字段的長(zhǎng)度、預(yù)設(shè)順序和起始位置得到所述待查詢(xún)字段。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于, 所述查詢(xún)模塊,具體用于在待查詢(xún)字段為固定長(zhǎng)度字段時(shí),根據(jù)預(yù)設(shè)順序確定所述待查詢(xún)字段之前的固定長(zhǎng)度字段,將待查詢(xún)字段之前的各個(gè)固定長(zhǎng)度字段的長(zhǎng)度相加得出待查詢(xún)字段的偏移量,從起始位置起偏移量個(gè)字節(jié)后的位置為待查詢(xún)字段的起始位置; 在待查詢(xún)字段為可變長(zhǎng)度字段時(shí),根據(jù)起始位置和所有固定長(zhǎng)度字段的長(zhǎng)度得出第一個(gè)可變長(zhǎng)度字段的起始位置,根據(jù)預(yù)設(shè)順序得出待查詢(xún)字段的順序號(hào),從第一個(gè)可變長(zhǎng)度字段的起始位置開(kāi)始,讀取可變長(zhǎng)度字段的長(zhǎng)度,按所述長(zhǎng)度跳到下一個(gè)可變長(zhǎng)度字段的起始位置,直到依據(jù)順序號(hào)確定跳到待查詢(xún)字段的起始位置為止。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于, 所述系統(tǒng)還包括: 刪除模塊,用于在刪除好友信息時(shí),從查詢(xún)節(jié)點(diǎn)數(shù)組中刪除對(duì)應(yīng)的好友節(jié)點(diǎn),并將刪除的好友節(jié)點(diǎn)之后的好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中依次前移,并將刪除的好友節(jié)點(diǎn)放入刪除節(jié)點(diǎn)數(shù)組中。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于, 所述系統(tǒng)還包括: 插入模塊,用于在插入好友信息時(shí),生成所述好友信息的好友節(jié)點(diǎn),根據(jù)好友節(jié)點(diǎn)中好友唯一標(biāo)識(shí)確定該好友節(jié)點(diǎn)在查詢(xún)節(jié)點(diǎn)數(shù)組中的位置,將好友節(jié)點(diǎn)插入所述位置; 按預(yù)設(shè)順序排列好友信息中的字段,在可變長(zhǎng)度字段的內(nèi)容前添加該可變長(zhǎng)度字段的長(zhǎng)度,以完成對(duì)好友信息的序列化操作; 查詢(xún)刪除節(jié)點(diǎn)數(shù)組,判斷是否存在對(duì)應(yīng)的好友信息總長(zhǎng)度不小于所述序列化后的好友信息總長(zhǎng)度的好友節(jié)點(diǎn); 如果存在,則用所述序列化后的好友信息替換所述查詢(xún)到的好友節(jié)點(diǎn)在字節(jié)數(shù)組中的好友信息,并在查詢(xún)節(jié)點(diǎn)數(shù)組中的插入的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置,將好友信息被替換的好友節(jié)點(diǎn)從刪除節(jié)點(diǎn)數(shù)組中刪除; 如果不存在,則從字節(jié)數(shù)組的結(jié)尾開(kāi)始存儲(chǔ)所述序列化后的好友信息,在插入的好友信息所在的好友節(jié)點(diǎn)中記錄存儲(chǔ)所述插入的好友信息的起始位置。
【文檔編號(hào)】G06F17/30GK103838760SQ201210484514
【公開(kāi)日】2014年6月4日 申請(qǐng)日期:2012年11月23日 優(yōu)先權(quán)日:2012年11月23日
【發(fā)明者】王洪澤 申請(qǐng)人:北京神州泰岳軟件股份有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
望奎县| 肥东县| 高安市| 凌云县| 渑池县| 朔州市| 博兴县| 汨罗市| 怀安县| 同仁县| 祁东县| 新建县| 兴和县| 松潘县| 上饶县| 枣阳市| 平南县| 改则县| 桂林市| 夏津县| 如皋市| 宁武县| 陆川县| 荔浦县| 桃园县| 漠河县| 凤阳县| 红河县| 福清市| 旬阳县| 和硕县| 清涧县| 分宜县| 宣化县| 临西县| 泽州县| 天水市| 罗城| 遵义县| 论坛| 湾仔区|