国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

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

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

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

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