專利名稱:一種存儲數據的方法及裝置的制作方法
技術領域:
本發(fā)明涉及計算機技術領域,具體涉及一種存儲數據的方法及裝置。
背景技術:
隨著計算機技術和網絡技術的發(fā)展,出現了各種各樣的基于計算機的通訊系統, 比如即時通訊IM系統,微博通訊系統等。在這類通訊系統中,需要對系統的數據進行存儲以及使用,以實現系統的各種功能。其中數據的存儲和使用可以通過各種程序語言來實現。 在程序語言中,一般需要將數據按照一定的類型進行存儲,并且編譯器在編譯階段(尤其是C++這種強類型語言中)會對數據的類型安全進行嚴格的檢查,不同的數據類型,是不能夠互相轉換,賦值的。在此情況下,當存儲一些稍微復雜一點的數據時,往往需要使用stl+ 一些自定義數據結構來存儲。而對于不同場景下的數據,往往又需要定義不同的數據結構。 因此,采用這種方法存儲的數據使用起來比較麻煩?;谏鲜鲈?,出現一些改進的存儲方法,以實現不同數據類型的靈活使用,比如轉換、讀取或傳遞等。例如,在腳本語言中,在存儲數據時,使用VARIANT結構來表示數據類型。然而,VARIANT結構中,一次只能有一種類型是有效的,也就是每次只能處理一個數據, 沒辦法既存儲數字,又存儲字符串,不能批量處理數據。
發(fā)明內容
有鑒于此,本發(fā)明實施例提供了一種存儲數據的方法及裝置,該方法及裝置可以處理批量數據。根據本發(fā)明實施例,一種存儲數據的方法包括建立至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲節(jié)點的子節(jié)點的標識和數據的映射列表;每接收一個數據判斷數據將要存儲的位置以及接收的數據的類型;如果數據存儲于第一節(jié)點,將數據的類型以及數據的值存儲在第一節(jié)點的第一模塊中;如果數據存儲于自定義數據結構的第二節(jié)點,將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。根據本發(fā)明另一實施例,一種存儲數據的裝置包括數據接口,用于接收數據;通用數據類型組件,用于建立并保存至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲節(jié)點的子節(jié)點的標識和子節(jié)點之間的映射列表;每當數據接口接收一個數據,判斷數據將要存儲的位置以及數據的類型;如果數據存儲于第一節(jié)點,則將數據的類型以及數據的值存儲在第一節(jié)點的第一模塊中;如果數據存儲于自定義數據結構的第二節(jié)點中,則將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。根據本發(fā)明又一實施例,一種通用數據類型組件包括節(jié)點建立模塊,判斷模塊和存儲模塊;節(jié)點建立模塊,用于建立并保存至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲節(jié)點的子節(jié)點的標識和子節(jié)點之間的映射列表;判斷模塊,用于每接收一個數據后,判斷數據將存儲于第一節(jié)點或自定義數據結構的第二節(jié)點,判斷數據的類型,并將判斷結果通知給存儲模塊;存儲模塊,用于在判斷模塊判斷數據將存儲于第一節(jié)點時,將數據的類型以及數據的值存儲在第一節(jié)點的第一模塊中;在判斷模塊判斷數據將存儲于自定義數據結構的第二節(jié)點時,將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。與現有技術相比,本發(fā)明實施例的自定義數據結構定義了一種通用數據類型;當將數據存儲為該通用數據類型時,該通用數據類型可以判斷待存儲數據的基本類型,并將待存儲數據的基本類型和值進行存儲。而且,由于在一個自定義數據結構定義的通用數據類型中,每個節(jié)點都可以設有其子節(jié)點的〈標識,子節(jié)點〉的映射列表,因此,可以將大量的數據存儲于該通用數據類型中。這種情況下,只要將大量的數據存儲成一個通用數據類型, 則使用該通用數據類型定義的一個變量就可以存儲大量的數據。并且,由于這種通用數據類型中各節(jié)點間存儲的數據類型可以不同,因此通過通用數據類型存儲的具有不同類型的數據,則使用該通用數據類型定義的一個變量就可以使用大量的具有不同類型的數據。并且,由于通用數據類型的變量中各個節(jié)點都有各自的類型標識,因此各個節(jié)點可以存儲不同類型的數據,而不需要存儲兼容類型的數據,即可以存儲LONG和int數據,也可以存儲BSTR字符串數據。
圖1為根據本發(fā)明實施例的一種存儲數據的方法的流程圖;圖2為本發(fā)明實施例中存儲數據的存儲模型;圖3示出了本發(fā)明實施例中存儲數據的通用數據類型的樹狀結構;圖4為本發(fā)明實施例的一種存儲數據的裝置;圖5為本發(fā)明另一實施例的一種存儲數據的裝置。
具體實施例方式下面結合附圖和具體實施例對本發(fā)明進行詳細說明。圖1為根據本發(fā)明實施例的一種存儲數據的方法的流程圖。如圖1所示,該方法包括步驟101 建立至少包括第一節(jié)點的自定義數據結構。在本步驟中,該第一節(jié)點為根節(jié)點。每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲該節(jié)點的子節(jié)點的標識與子結點之間的映射列表。為了描述方便,本發(fā)明將這種自定義數據結構定義的數據類型稱為通用數據類型 (WData)。
步驟102 每接收一個數據判斷數據將要存儲的位置以及數據的類型。本步驟中,當用戶為具有自定義數據結構的變量賦值時,則自定義數據結構接收到數據。在此,用戶為變量賦值相當于將數據存儲于該變量中;數據的類型可以是任何的基本類型,比如整型(int),浮點型(float),字節(jié)型(byte)等。步驟103 如果數據存儲于第一節(jié)點,則將數據的類型以及數據的值存儲在第一節(jié)點的第一模塊中。本步驟中,當數據存儲于第一節(jié)點,即存儲于根節(jié)點時,該根節(jié)點無需對應一個節(jié)點標識與節(jié)點之間的映射列表,即<key,WData節(jié)點 > (以下簡稱<key, WData 。并且,當自定義數據結構中僅有第一節(jié)點,則第一節(jié)點中的第二模塊的映射列表為空。當第一節(jié)點存在子節(jié)點時,則第一節(jié)點中的第二模塊的映射列表記錄第一節(jié)點的子節(jié)點標識與子節(jié)點之間的映射列表<key,WData〉。步驟104 如果數據存儲于自定義數據結構的其他節(jié)點(稱為第二節(jié)點),則將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。本步驟中,當數據存儲于第二節(jié)點時,由于第二節(jié)點為子節(jié)點,則該數據屬于子數據。此時,第二節(jié)點對應一個節(jié)點標識與節(jié)點之間的映射列表,比如<key2,WData〉。該映射列表存儲于第二節(jié)點的父節(jié)點中,用于索引第二節(jié)點的子節(jié)點,從而索引子結點中的數據。在步驟104之前,還包括判斷自定義數據結構中是否包括第二節(jié)點;如果沒有, 則建立所述自定義數據結構的第二節(jié)點;否則,直接將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。建立自定義數據結構的第二節(jié)點可以包括在第二節(jié)點的父節(jié)點的第二模塊中填寫第二節(jié)點的標識與第二節(jié)點之間的映射列表。同理,當接收到存儲于第二節(jié)點的子節(jié)點的數據時,在第二節(jié)點中的第二模塊填寫子節(jié)點的標識與子節(jié)點之間的映射列表。以上的自定義數據結構可以由C++語言、或腳本語言或VB語言等來實現。由以上實施例可以看出,由于自定義數據結構定義了一種通用數據類型;當將數據存儲為該通用數據類型時,該通用數據類型可以判斷待存儲數據的類型,并將待存儲數據的類型和值進行存儲。因而,用戶在存儲數據時,不用手動進行不同數據類型的轉換。而且,由于在一個自定義數據結構的通用數據類型中,每個節(jié)點都可以設有其子節(jié)點的<key,WData>映射列表,因此,可以將大量的數據存儲于該通用數據類型中。這種情況下,只要將大量的數據存儲成一個通用數據類型,則可以在傳遞一個通用數據類型的變量的情況下傳遞大量的數據,從而可以大大簡化通訊系統的構建和維護。圖2為本發(fā)明實施例中存儲數據的存儲模型,即示出了自定義數據結構中每個節(jié)點的存儲模型。如圖2所示,每個存儲模型至少存儲一個WData數據,其包括第一模塊 (Value模塊),用于存儲WData數據的類型標識和值,以及第二模塊《key,WData〉模塊), 用于存儲該節(jié)點的子節(jié)點的標識與子節(jié)點之間的映射列表<key,WData〉。在第二模塊中, key可以使用字符串表示。通過以上的存儲模型,通用數據類型WData可以構造成一個樹狀的通用數據類型。根據本發(fā)明實施例,上述的第一模塊可以利于VARIANT結構來實現數據的類型標識和值的存儲。具體地,VARIANT結構的內部利用一個類型標識來表示具體的數據類型。當 需要使用存儲的數據時,可以根據VARIANT結構中的類型標識來判斷數據的類型,然后獲 取存儲的數據。VARIANT結構的定義如下struct tagVARIANT{union{struct_tagVARIANT{VARTYPE ii ;//類型標識WORD wReservedl ;WORD wReserved2 ;WORD wReserved3 ;Il以下為具體的類型,每次只有一個有效//具體根據類型標識來判斷哪個類型有效union{LONG IVal ;BYTE bVal ;SHORT iVal ;FLOAT fltVal ;......}......}......在定義VARIANT結構后,則可以按照上述結構存儲數據。在存儲數據后,則可以使 用存儲的數據。圖3示出了本發(fā)明實施例中存儲數據的通用數據類型的樹狀結構。如圖3所示, 第一節(jié)點(根節(jié)點)可以有一個或多個子節(jié)點,而每個子節(jié)點也可以有一個或多個子節(jié) 點,依此類從。這種情況下,一個通用數據類型的變量可以存儲大量的數據。并且,由于 <key, WData>這種映射關系的使用,可以很方便地讀取各個存儲的數據,并可以方便地改 變存儲的某個或某些數據的數據類型或數據值。圖3中,第一節(jié)點的第一模塊存儲自身的 一個值,以及該值的類型標識,第二模塊中存儲的<key,WData>列表包括5個映射關系, 即(keyl, WData), (key2, WData), (key3, WData), (key4, WData)和(key5,WData)。其中, (key3,WData)對應的節(jié)點的第二模塊中又存儲有包括2個映射關系的<key,WData>列表, 即(key6,WData)和(key7,WData);而(key4,WData)對應的節(jié)點的第二模塊中又存儲有包 括一個映射關系的<key,WData〉列表,即(key8,WData)。
由此可見,本發(fā)明實施例提出的存儲模型是一種遞歸的存儲方式,可以構成樹狀的通用數據類型,存儲大量的數據。圖3所示的樹狀結構只是本發(fā)明的通用數據類型的一種結構,并不用于限制本發(fā)明通用數據類型的結構。本發(fā)明的通用數據類型還可以由嵌套結構等具有多級索引特性的其他結構來實現。在通過圖2和3所示的通用數據類型定義了一個變量之后,則可以方便地利用該變量對數據進行操作,比如對數據進行讀取、轉換以及傳遞。圖1所示的存儲數據的方法可以實現不同類型的數據在同一變量中的存儲,并且可以實現大量的數據的多級存儲,比如圖3所示的樹狀存儲。在以下實施例中,以C++語言的系統為例并結合圖3所示的樹狀結構,說明本發(fā)明實施例中數據存儲方法。在C++語言中,定義一個通用數據類型以及將數據存儲在通用數據類型如下所示WData data ; data = 5 ; data ="xxx";data[ “keyl”] = 10 ;data[ “keyl”] =”sss”;data[ “key3”] [ “key6”] = 15 ;data[ “key3”] [ “key6”] [· ··][···]··· = · · ·從以上可以看出,首先定義了一個通用數據類型的變量data。其次,則可以對變量data進行賦值,即可以在data中存儲數據。在本實施例中,給data賦值整型數據“5” ; 再次,還可以給data賦值字符串數據“XXX”,即將字符串數據“XXX”存儲到WData通用數據類型的變量data中,覆蓋了之前存儲的整型數據“5”。具體地,可以通過重載“=”操作符的方式實現將數據“5”或“XXX”存儲在變量data的根節(jié)點的第一模塊中(即Value模塊中)。除了將數據存儲在根節(jié)點外,還可以進行多級存儲,即可以在根節(jié)點的子節(jié)點存儲數據。例如,在keyl對應的子節(jié)點中存儲整型數據10或字符串數據“sss”。再例如,在 key3對應的子節(jié)點中的key6對應的子節(jié)點中存儲整型數據15。通過以上的存儲方法,可以將大量的不同類型的數據存儲在一個通用數據類型的變量中,從而可以方便數據的使用。 在多級存儲中,可以重載[]操作符來實現key與各個WData的映射。在采用圖1所示的方法存儲數據之后,則可以方便地使用存儲的數據,比如讀取、 轉換以及傳遞等。以下將結合存儲數據的裝置來說明如何使用存儲的數據。圖4為本發(fā)明實施例的一種存儲數據的裝置。如圖4所示,該裝置包括數據接口 401,用于接收數據;通用數據類型組件402,用于建立并存儲至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲所述節(jié)點的子節(jié)點的標識與子節(jié)點之間的映射列表;每當數據接口 401接收一個數據,用于判斷數據將要存儲的位置以及數據的類型;如果數據存儲于第一節(jié)點,則將數據的類型以及數據的值存儲在第一節(jié)點的第一模塊中;如果數據存儲于自定義數據結構中的第二節(jié)點,將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。根據本發(fā)明實施例,通用數據類型組件包括節(jié)點建立模塊,判斷模塊和存儲模塊;
節(jié)點建立模塊,用于建立并保存至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構;判斷模塊,用于判斷數據的存儲于第一節(jié)點或第二節(jié)點以及數據的類型,并將判斷結果通知給存儲模塊;存儲模塊,用于根據判斷模塊的判斷結果,將數據的類型以及數據的值存儲在所述第一節(jié)點的第一模塊中或將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。根據本發(fā)明實施例,判斷模塊還用于在數據存儲于所述自定義數據結構的第二節(jié)點時,判斷自定義數據結構中是否包括第二節(jié)點;如果沒有,則通知節(jié)點建立模塊建立自定義數據結構的第二節(jié)點;否則,通知存儲模塊將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。根據本發(fā)明實施例,節(jié)點建立模塊通過在第二節(jié)點的父節(jié)點的第二模塊中填寫第二節(jié)點的標識與第二節(jié)點之間的映射列表來建立第二節(jié)點。根據本發(fā)明實施例,數據接口還用于從通用數據類型組件讀取第一節(jié)點的第一模塊中的數據,以及根據節(jié)點標識從通用數據類型組件讀取與節(jié)點標識對應的節(jié)點中存儲的數據。根據本發(fā)明實施例,判斷模塊還用于判斷某個節(jié)點的數據的類型是否與新接收的待存儲于所述節(jié)點的數據的類型不同,如果不同,則修改節(jié)點的第一模塊中的數據的類型標識以及值;和/或判斷模塊還用于判斷是否接收到對自定義數據結構中的某個節(jié)點的數據的類型轉換操作,如果是,則修改節(jié)點的第一模塊中的數據的類型標識。根據本發(fā)明實施例,通用數據類型組件還包括傳遞模塊,用于將自定義數據結構在不同或相同程序語言環(huán)境的模塊間直接傳遞。根據本發(fā)明實施例,通用數據類型組件可以由C++語言、或腳本語言、VB語言來實現。根據本發(fā)明實施例,當通用數據類型組件由C++語言實現時,該裝置還包括C++封裝類(〔++Wrapper),用于對通用數據類型組件中的自定義數據結構進行封裝。圖5為本發(fā)明另一實施例的一種存儲數據的裝置。如圖5所示,以利用C++語言來實現本發(fā)明的自定義數據結構為例,該裝置包括數據接口 IWData,用于接收或發(fā)送數據; WData通用數據類型組件,用于根據圖1所示的方法存儲接收的數據;〔++Wrapper封裝類, 用于對自定義數據結構的通用數據類型WData進行封裝,從而可以使用“=”和/或“[]”操作符來實現數據的存儲和/或多級存儲。而WData通用數據類型組件可以是C++中的Com 組件。在本發(fā)明實施例中,通過數據接口 IWData還可以讀取WData中根節(jié)點的數據值,并可以根據key讀取WData中子節(jié)點的數據值。在圖5所示的實施例中,C++Wrapper封裝類將WData通用數據類型組件封裝成CWData組件。具體地,C++ffrapper封裝類利用智能指針CComPtKIWData〉對數據接口 IWData進行封裝,從而使得在使用CWData組件時和直接通過數據接口 IWData來使用 WData通用數據類型組件沒有區(qū)別。同時,CWData通過重載“=”等號操作符,即重新定義 “=,,的含義,使得“=,,具有判斷WData中的數據以及數據類型的功能,并通過重載類型轉換操作符(比如(int)、(BYTE)等),即對類型轉換操作符重新定義,使得類型轉換符具有判斷WData中的數據以及將WData中的數據進行類型轉換的功能,可以實現在C++中在一個通用數據類型的變量中存儲不同類型的數據,以及使用任意類型的數據;通過重載“ □” 方括號操作符,實現了獲取子節(jié)點中的WData數據的操作,比如data[“keyl”]就等價于獲取data中keyl對應的子節(jié)點中的WData數據。由于返回的子節(jié)點中的WData數據仍然是 CffData,所以直接多級使用方括號操作符,類似多維數組的使用。在本發(fā)明又一實施例中,以圖5所示的裝置來說明如何使用存儲的數據。具體地, 說明對存儲的數據的讀取、轉換以及傳遞。1)數據接口 IWData的定義以及數據的讀取可以如下數據接口定義interface IffDataJDispatch{
0104]H 讀取 WData 自身 Value
0105]HRESULT GetValue(VARIANT^pVar);
0106]HRESULT SetValue(VARIANT var);
0107]//根據key讀取子WData的操作,讀取的子WData又可以
0108]//有自身的Value和子WData.
0109]HRESULT GetSubData(BSTR bsKey, IWData氺氺ppData);
0110]HRESULT SetSubData(BSTR bsKey, IffData^pData);
0111]...... }在以上實例中,每個節(jié)點中的Value模塊可以使用VARIANT結構來實現。2)將WData用C++Wrapper封裝類封裝之后得到CWData,利用CWData存儲數據, 并對存儲的數據進行類型轉換CffData data ;data = 10 ;data = "string";data[l] = 10 ;data[ “key”] = 20 ;data[ "key 1” ] [ “key2”][ “key3”] =“test”;int χ = (int)data ;data = (BYTE) 3 ;由以上的使用實例可以看出,在進行數據類型轉換時,可以由用戶指定具體的類型。由于CWData通用數據類型中具有數據類型判斷功能,可以將data中數據的基本類型直接轉換為指定的類型。又或者,可以不需要用戶指定具體的類型,而且由CWData通用數據類型根據存儲的數據的默認類型對data的基本類型進行轉換。比如,當data中的數據是數字時,則轉換為數字的默認類型,當data中的數據是字符串時,則轉換為字符串的默認類型。比如,“data = 10”中,利用重載的“=”操作符把10存儲在data的根節(jié)點的Value 模塊,而之后“data = "string"的操作中,利用重載的“=”操作符把string存儲在data的根節(jié)點的Value模塊中,而此操作同時也是實現了將data根節(jié)點的數據類型由整型轉換為字符串型,此時類型標識由整型改為字符串型。當然,也可以不利用C++Wrapper封裝類封裝WData,而直接使用WData存儲數據, 并對存儲的數據進行使用。但是,這種情況下,操作會比較復雜,比如Il直接使用WData存儲和使用數據CComPtr<IWData>pData ;CreateffData (&pData);pData_>SetValue(CComVariant(IO));pData->SetValue (CComVariant ( "string,,));CComPtr<IWData>pSubData ;pData->GetSubValue ( "key", &pSubData);pSubData->SetValue(CcomVariant(20));以上直接使用WData存儲和使用數據的結果相當于使用CWData的如下操作的結果CffData data ;data = 10 ;data = "string";data[l] = 10 ;data[ ‘‘key”] = 20 ;由此可見,利用C++Wrapper封裝類封裝WData組件后,對WData的數據的存儲和使用更加簡潔、方便,從而可以使得通訊系統的運行速度更快,且通訊系統的維護也會更加方便,可以節(jié)省通訊系統的維護成本。3)利用〔++Wrapper封裝類封裝通用數據類型WData,在通訊系統的各模塊間傳遞存儲為通用數據類型WData的數據,例如,可以將本發(fā)明的技術方案利用在微博系統中以存儲微博的用戶資料,并在微博系統的各模塊間傳遞存儲的微博用戶資料。例如,微博系統中具有A模塊如下CWDatamsg;msg[ ‘‘id”]=...;msg[ ‘‘content,,] = "xxxxx,,;msg[ ‘‘time”] = . · ·;......而A模塊可以將msg作為參數調用B模塊,例如ShowMsg (CWData msg);B模塊如下Void ShowMsg(CWData msg){//顯示內容... msg [ “ content,,]…//顯示時間
. . . msg[ "time"].........}從以上A和B模塊之間的調用實例可以看出,A模塊可以通過一個msg變量將 “id”,“COntent”和“time”三個數據傳遞給B模塊,從而可以實現A和B模塊之間的大量數據的傳遞。因此,可以簡化微博系統的建立和維護過程,節(jié)省微博系統的開發(fā)和維護成本。以上僅僅是本發(fā)明的實施例,但并不意味著本發(fā)明的保護范圍僅限于所述的實施例。
權利要求
1.一種存儲數據的方法,其特征在于,包括以下步驟建立至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲所述節(jié)點的子節(jié)點的標識和數據的映射列表;每接收一個數據判斷所述數據將要存儲的位置以及接收的數據的類型;如果所述數據存儲于第一節(jié)點,將數據的類型以及數據的值存儲在所述第一節(jié)點的第一模塊中;如果所述數據存儲于所述自定義數據結構的第二節(jié)點,將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。
2.如權利要求1所述的方法,其特征在于,還包括如果所述數據要存儲于所述自定義數據結構的第二節(jié)點,判斷所述自定義數據結構中是否包括所述第二節(jié)點;如果沒有,則建立所述自定義數據結構的第二節(jié)點;否則,直接將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。
3.如權利要求2所述的方法,其特征在于,所述建立所述自定義數據結構的第二節(jié)點包括在所述第二節(jié)點的父節(jié)點的第二模塊中填寫第二節(jié)點的標識與第二節(jié)點之間的映射列表。
4.如權利要求1、2或3所述的方法,其特征在于,如果一個節(jié)點沒有子節(jié)點,則其第二模塊中的映射列表為空。
5.如權利要求4所述的方法,其特征在于,還包括通過重載類型轉換操作符以實現對存儲在所述自定義數據結構中的數據進行類型的轉換;其中,所述判斷接收的數據的類型包括通過重載程序語言中的等號操作符來實現對數據的類型的判斷。
6.如權利要求4所述的方法,其特征在于,還包括讀取存儲在所述自定義數據結構中的數據。
7.如權利要求4所述的方法,其特征在于,還包括通過傳遞所述自定義數據結構來實現將存儲在自定義數據結構中一個或多個或所有數據在不同或相同程序語言環(huán)境的模塊間的傳遞。
8.如權利要求4所述的方法,其特征在于,所述自定義數據結構由C++語言、或腳本語言或VB語言實現。
9.一種存儲數據的裝置,其特征在于,包括數據接口,用于接收數據;通用數據類型組件,用于建立并保存至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲所述節(jié)點的子節(jié)點的標識和子節(jié)點之間的映射列表;每當數據接口接收一個數據,判斷所述數據將要存儲的位置以及數據的類型;如果所述數據存儲于第一節(jié)點,則將數據的類型以及數據的值存儲在所述第一節(jié)點的第一模塊中;如果所述數據存儲于所述自定義數據結構的第二節(jié)點中,則將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。
10.如權利要求9所述的裝置,其特征在于,所述通用數據類型組件包括節(jié)點建立模塊,判斷模塊和存儲模塊;所述節(jié)點建立模塊,用于建立并保存至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構;所述判斷模塊,用于判斷所述數據的存儲于第一節(jié)點或第二節(jié)點以及數據的類型,并將判斷結果通知給所述存儲模塊;所述存儲模塊,用于根據判斷模塊的判斷結果,將數據的類型以及數據的值存儲在所述第一節(jié)點的第一模塊中或將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。
11.如權利要求10所述的裝置,其特征在于,所述判斷模塊還用于在所述數據要存儲于所述自定義數據結構的第二節(jié)點時,判斷所述自定義數據結構中是否包括所述第二節(jié)點;如果沒有,則通知所述節(jié)點建立模塊建立所述自定義數據結構的第二節(jié)點;否則,通知所述存儲模塊將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。
12.如權利要求11所述的裝置,其特征在于,所述節(jié)點建立模塊通過在所述第二節(jié)點的父節(jié)點的第二模塊中填寫第二節(jié)點的標識與第二節(jié)點之間的映射列表來建立所述第二節(jié)點。
13.如權利要求10、11或12所述的裝置,其特征在于,所述通用數據類型組件由C++程序語言實現;所述裝置還包括c++封裝類(c++wrapper),用于對通用數據類型組件中的自定義數據結構進行封裝。
14.如權利要求12所述的裝置,其特征在于,所述數據接口還用于從所述通用數據類型組件讀取第一節(jié)點的第一模塊中的數據,以及根據節(jié)點標識從所述通用數據類型組件讀取與節(jié)點標識對應的節(jié)點中存儲的數據。
15.如權利要求12所述的裝置,其特征在于,所述判斷模塊還用于判斷某個節(jié)點的數據的類型是否與新接收的待存儲于所述節(jié)點的數據的類型不同,如果不同,則修改所述節(jié)點的第一模塊中的數據的類型標識以及值;和/或所述判斷模塊還用于判斷是否接收到對所述自定義數據結構中的某個節(jié)點的數據的類型轉換操作,如果是,則修改所述節(jié)點的第一模塊中的數據的類型標識。
16.如權利要求12所述的裝置,其特征在于,所述通用數據類型組件還包括傳遞模塊, 用于通過傳遞所述自定義數據結構來實現將存儲在自定義數據結構中一個或多個或所有數據在不同或相同程序語言環(huán)境的模塊間的傳遞。
17.如權利要求9、10或11所述的裝置,其特征在于,所述數據接口是COM接口。
18.—種通用數據類型組件,其特征在于,包括節(jié)點建立模塊,判斷模塊和存儲模塊;所述節(jié)點建立模塊,用于建立并保存至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲所述節(jié)點的子節(jié)點的標識和子節(jié)點之間的映射列表;所述判斷模塊,用于每接收一個數據后,判斷所述數據將存儲于第一節(jié)點或所述自定義數據結構的第二節(jié)點,判斷數據的類型,并將判斷結果通知給所述存儲模塊;所述存儲模塊,用于在所述判斷模塊判斷所述數據將存儲于第一節(jié)點時,將數據的類型以及數據的值存儲在所述第一節(jié)點的第一模塊中;在所述判斷模塊判斷所述數據將存儲于所述自定義數據結構的第二節(jié)點時,將數據的類型以及數據的值存儲在所述第二節(jié)點的第一模塊中。
全文摘要
本發(fā)明提供了一種存儲數據的方法及裝置。該方法包括建立至少包括作為根節(jié)點的第一節(jié)點的自定義數據結構,其中,每個節(jié)點包括第一模塊,用于存儲數據的類型標識和值,以及第二模塊用于存儲節(jié)點的子節(jié)點的標識與子節(jié)點的之間的映射列表;每接收一個數據判斷數據將要存儲的位置以及接收的數據的類型;如果數據存儲于第一節(jié)點,將數據的類型以及數據的值存儲第一節(jié)點的第一模塊中;如果數據存儲于自定義數據結構的第二節(jié)點,將數據的類型以及數據的值存儲在第二節(jié)點的第一模塊中。根據本發(fā)明,可以方便地進行不同數據類型的轉換、對數據進行讀取和傳遞。
文檔編號G06F17/30GK102402545SQ20101028371
公開日2012年4月4日 申請日期2010年9月14日 優(yōu)先權日2010年9月14日
發(fā)明者彭勇 申請人:騰訊科技(深圳)有限公司