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