專(zhuān)利名稱(chēng):數(shù)據(jù)交換方法、系統(tǒng)及反序列化方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)通信技術(shù),特別是涉及一種數(shù)據(jù)交換方法和系統(tǒng),以及一種反序列化方法。
背景技術(shù):
在網(wǎng)絡(luò)間數(shù)據(jù)傳輸和應(yīng)用中,通常需要將信息轉(zhuǎn)換成二進(jìn)制文件,實(shí)現(xiàn)數(shù)據(jù)傳輸和應(yīng)用。目前,通常采用ProtobufTer數(shù)據(jù)交換格式實(shí)現(xiàn)二進(jìn)制文件的序列化和反序列化。PiOtobufTer是一種數(shù)據(jù)交換格式,將現(xiàn)有的信息根據(jù)不同的類(lèi)型,按照相應(yīng)的編碼方式序列化為二進(jìn)制流,用于保存信息或者數(shù)據(jù)傳輸。在讀取該二進(jìn)制信息或者接收該二進(jìn)制信息時(shí),對(duì)經(jīng)序列化的二進(jìn)制流進(jìn)行反序列化,獲取原始信息或數(shù)據(jù),以便進(jìn)一步應(yīng)用。Protobuffer方式序列化得到的二進(jìn)制流的數(shù)據(jù)量小,序列化與反序列化操作的速度快,是一種較優(yōu)秀的序列化方法。因此,Protobuffer方式得到了廣泛的應(yīng)用。原始數(shù)據(jù)經(jīng)Protobuffer方式序列化之后,接收端對(duì)序列化的二進(jìn)制流進(jìn)行還原,得到原始數(shù)據(jù)的過(guò)程,即反序列化。目前的反序列化方法中,除了獲取二進(jìn)制流外,還需要獲知序列化時(shí)采用的類(lèi)型,進(jìn)而根據(jù)類(lèi)型進(jìn)行相應(yīng)的反序列化。由于獲知序列化時(shí)采用的序列類(lèi)型后的二進(jìn)制流以及其對(duì)應(yīng)的類(lèi)型過(guò)程復(fù)雜,導(dǎo)致才能夠正確反序列化解析出原始數(shù)據(jù)的序列化的內(nèi)容,因此實(shí)現(xiàn)方法復(fù)雜,并且該反序列化方法的應(yīng)用范圍也受到局限。
發(fā)明內(nèi)容
本發(fā)明提供了一種數(shù)據(jù)交換方法和系統(tǒng),采用該方法和系統(tǒng)能夠提高反序列化方法應(yīng)用的靈活性,拓寬應(yīng)用范圍。本發(fā)明還提供了一種反序列化方法,采用該方法能夠提高反序列化方法應(yīng)用的靈活性,拓寬應(yīng)用范圍。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的本發(fā)明公開(kāi)了一種數(shù)據(jù)交換方法,包括數(shù)據(jù)源端對(duì)原始數(shù)據(jù)采用PiOtobufTer數(shù)據(jù)交換方式進(jìn)行序列化,得到二進(jìn)制流;應(yīng)用端獲取經(jīng)序列化的二進(jìn)制流;解析所述二進(jìn)制流,獲取所述二進(jìn)制流中的類(lèi)型特征比特;根據(jù)所述類(lèi)型特征比特判斷所述二進(jìn)制流的序列類(lèi)型;根據(jù)得到的序列類(lèi)型對(duì)所述二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。本發(fā)明公開(kāi)了一種反序列化方法,包括獲取經(jīng)序列化的二進(jìn)制流;解析所述二進(jìn)制流,獲取所述二進(jìn)制流中的類(lèi)型特征比特;根據(jù)所述類(lèi)型特征比特判斷所述二進(jìn)制流的序列類(lèi)型;根據(jù)得到的序列類(lèi)型對(duì)所述二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù) 。
本發(fā)明還公開(kāi)了一種數(shù)據(jù)交換系統(tǒng),包括數(shù)據(jù)源端,用于對(duì)原始數(shù)據(jù)采用Protobuffer數(shù)據(jù)交換方式進(jìn)行序列化,得到二進(jìn)制流;應(yīng)用端, 用于獲取經(jīng)序列化的二進(jìn)制流,解析所述二進(jìn)制流,獲取所述二進(jìn)制流中的類(lèi)型特征比特,根據(jù)所述類(lèi)型特征比特判斷所述二進(jìn)制流的序列類(lèi)型,根據(jù)得到的序列類(lèi)型對(duì)所述二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。由上述發(fā)明內(nèi)容可見(jiàn),對(duì)于序列化之后的二進(jìn)制流,解析獲得其類(lèi)型特征比特,根據(jù)該類(lèi)型特征比特以及預(yù)設(shè)規(guī)則判斷該二進(jìn)制流的類(lèi)型,采用該類(lèi)型對(duì)應(yīng)的解析方法進(jìn)行解析,獲得反序列化的解析結(jié)果。從而能夠根據(jù)解析獲知二進(jìn)制流的類(lèi)型,而不必在反序列化之前預(yù)先獲知其類(lèi)型,因此,不必要求在解析之前必須獲知該類(lèi)型,本發(fā)明提出的反序列化方法比現(xiàn)有的反序列化方法的靈活性強(qiáng),應(yīng)用范圍廣。
圖1是本發(fā)明實(shí)施例一的數(shù)據(jù)交換方法的流程圖;圖2是非嵌套類(lèi)型的長(zhǎng)度限定型二進(jìn)制碼流的結(jié)構(gòu)示意圖;圖3是嵌套類(lèi)型的長(zhǎng)度限定型二進(jìn)制碼流的結(jié)構(gòu)示意圖;圖4是本發(fā)明實(shí)施例二的反序列化方法的流程圖;圖5是本發(fā)明實(shí)施例三的數(shù)據(jù)交換系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明的基本思想是對(duì)序列化之后的二進(jìn)制流進(jìn)行解析,獲得其類(lèi)型特征比特,根據(jù)該類(lèi)型特征比特以及預(yù)設(shè)規(guī)則判斷該二進(jìn)制流的類(lèi)型,采用該類(lèi)型對(duì)應(yīng)的解析方法解析獲得反序列化結(jié)果。圖1是本發(fā)明實(shí)施例一的數(shù)據(jù)交換方法的流程圖。如圖1所示,該方法包括如下過(guò)程。步驟10 :數(shù)據(jù)源端對(duì)原始數(shù)據(jù)采用Protobuffer數(shù)據(jù)交換方式進(jìn)行序列化,得到二進(jìn)制流。步驟11 :應(yīng)用端獲取經(jīng)序列化的二進(jìn)制流。在本步驟中,具體地,獲取的二進(jìn)制流為經(jīng)過(guò)序列化之后的二進(jìn)制流。步驟12 :解析二進(jìn)制流,獲取二進(jìn)制流中的類(lèi)型特征比特。在本步驟中,具體方法為解析二進(jìn)制流,得到二進(jìn)制流的第一個(gè)字節(jié),讀取二進(jìn)制流的第一個(gè)字節(jié)的第O至2個(gè)比特的值,作為二進(jìn)制流中的類(lèi)型特征比特。步驟13 :根據(jù)類(lèi)型特征比特判斷二進(jìn)制流的序列類(lèi)型。在本步驟中,根據(jù)類(lèi)型特征比特判斷二進(jìn)制流的序列類(lèi)型的具體方法為將類(lèi)型特征值與預(yù)置二進(jìn)制流類(lèi)型相匹配,按匹配結(jié)果確定二進(jìn)制流對(duì)應(yīng)的類(lèi)型。在步驟13之后,根據(jù)得到的序列類(lèi)型對(duì)二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。具體地,根據(jù)得到的序列類(lèi)型對(duì)二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理的具體過(guò)程包括如下過(guò)程如果步驟13判斷二進(jìn)制流的類(lèi)型為變體型(Varint),執(zhí)行步驟14 ;如果步驟13判斷二進(jìn)制流的類(lèi)型為64比特型,執(zhí)行步驟15 ;如果步驟13判斷二進(jìn)制流的類(lèi)型為32比特型,執(zhí)行步驟16 ;如果步驟13判斷二進(jìn)制流的類(lèi)型為長(zhǎng)度限定型(Length-delimited),對(duì)二進(jìn)制流采用長(zhǎng)度限定型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù),具體可以執(zhí)行步驟17至步驟19。在本發(fā)明實(shí)施例中,類(lèi)型特征比特標(biāo)識(shí)的是Protobuffer序列化協(xié)議定義的類(lèi)型編號(hào),該協(xié)議將不同類(lèi)型的信息通過(guò)特征比特進(jìn)行編碼來(lái)標(biāo)識(shí)。在本步驟中,根據(jù)類(lèi)型特征比特的值來(lái)判斷二進(jìn)制流的類(lèi)型。具體地,如果步驟12獲取的類(lèi)型特征比特為000,則判斷二進(jìn)制流的類(lèi)型為變體型。如果步驟12獲取的類(lèi)型特征比特為001,則判斷二進(jìn)制流的類(lèi)型為64比特型。如果步驟12獲取的類(lèi)型特征比特為010,則判斷二進(jìn)制流的類(lèi)型為長(zhǎng)度限定型。如果步驟12獲取的類(lèi)型特征比特為101,則判斷二進(jìn)制流的類(lèi)型為32比特型。
步驟14 :對(duì)二進(jìn)制流采用變體型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。在本步驟中,不限制對(duì)二進(jìn)制流進(jìn)行變體型反序列處理的具體方法,現(xiàn)有的一切可以實(shí)現(xiàn)變體型解析的方法均可適用。在多種解析方法中的一個(gè)具體實(shí)例為首先,解析二進(jìn)制流,獲取二進(jìn)制流的第二個(gè)字節(jié)和第三個(gè)字節(jié)。判斷每個(gè)字節(jié)的按照從左至右順序的最高位是I或O。如果是1,獲取字節(jié),并繼續(xù)獲取其它字節(jié)。如果是0,獲取字節(jié),并以字節(jié)作為變體型編碼的最后一個(gè)字節(jié)。然后,獲取變體型編碼的全部字節(jié)后,去掉全部字節(jié)的最高位,將去掉最高位的全部字節(jié)按照從右至左的順序排列,獲得變體型解析結(jié)果。步驟15 :對(duì)二進(jìn)制流采用64比特型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。步驟16 :對(duì)二進(jìn)制流采用32比特型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。步驟17 :根據(jù)預(yù)設(shè)規(guī)則判斷二進(jìn)制流是否屬于嵌套類(lèi)型。如果是,執(zhí)行步驟18 ;否則,執(zhí)行步驟19。圖2是非嵌套類(lèi)型的長(zhǎng)度限定型二進(jìn)制碼流的結(jié)構(gòu)示意圖。圖3是嵌套類(lèi)型的長(zhǎng)度限定型二進(jìn)制碼流的結(jié)構(gòu)示意圖。如圖2所示,非嵌套類(lèi)型包括字符串類(lèi)型和數(shù)組類(lèi)型。其中,第一個(gè)字節(jié)均代表位置和類(lèi)型。對(duì)于數(shù)組類(lèi)型,所有元素對(duì)應(yīng)的位置和類(lèi)型相同。內(nèi)容是相應(yīng)的數(shù)組內(nèi)位置的值。對(duì)于字符串類(lèi)型,第二個(gè)字節(jié)代表的是長(zhǎng)度,采用Varint格式。后續(xù)的字節(jié)代表內(nèi)容,該內(nèi)容的長(zhǎng)度為第二字節(jié)指示的長(zhǎng)度。采用萬(wàn)國(guó)碼(簡(jiǎn)稱(chēng)UTF-8)編碼格式可以解析出相應(yīng)的字符串的內(nèi)容。如圖3所示,對(duì)于嵌套類(lèi)型,與字符串類(lèi)型類(lèi)似地,第一個(gè)字節(jié)代表位置和類(lèi)型,第二個(gè)字節(jié)代表長(zhǎng)度。后續(xù)字節(jié)代表嵌套類(lèi)型內(nèi)部的內(nèi)容,可以按照該內(nèi)容的具體的類(lèi)型進(jìn)行解析。嗯,如果能在飛信上說(shuō)清楚,我寫(xiě)也行,在本步驟中,需要對(duì)上述嵌套類(lèi)型與非嵌套類(lèi)型進(jìn)行區(qū)分,從而確定正確的解析方法。具體過(guò)程包括首先判斷二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容是否有值。具體地,判斷二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容是否有值的方法包括獲取二進(jìn)制流中第3至7個(gè)比特為00001的字節(jié),參見(jiàn)圖3,通常二進(jìn)制流中第3至7個(gè)比特為00001的字節(jié)為第三個(gè)字節(jié)。判斷二進(jìn)制流中第3至7個(gè)比特為00001的字節(jié)對(duì)應(yīng)的內(nèi)容是否為空或O。如果是,二進(jìn)制流中第3至7個(gè)比特為OOOOl的字節(jié)對(duì)應(yīng)的內(nèi)容為空或0,則二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容沒(méi)有值。否則,二進(jìn)制流中第3至7個(gè)比特為00001的字節(jié)對(duì)應(yīng)的內(nèi)容不為空也不為0,二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容有值。如果二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容有值,則判斷二進(jìn)制流屬于嵌套類(lèi)型;否則,二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容沒(méi)有值,判斷二進(jìn)制流不屬于嵌套類(lèi)型。其中,第一個(gè)位置,就是在各種類(lèi)型的二進(jìn)制流中,標(biāo)識(shí)的位置為I的位置,第一個(gè)位置對(duì)應(yīng)的字節(jié),就是OOOOlxxx這個(gè)字節(jié),不是指第一個(gè)字節(jié),而是指其指示的位置為I的那個(gè)字節(jié),該字節(jié)不是第一個(gè)字節(jié),通常為第三個(gè)字節(jié)。步驟18 :對(duì)二進(jìn)制流采用嵌套類(lèi)型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。在本步驟中,具 體地,在對(duì)二進(jìn)制流采用字符串類(lèi)型反序列處理方式進(jìn)行反序列處理時(shí),從第三個(gè)字節(jié)開(kāi)始獲取嵌套的內(nèi)容,解析該內(nèi)容。步驟19 :判斷二進(jìn)制流是數(shù)組類(lèi)型或字符串類(lèi)型。如果是數(shù)組類(lèi)型,以數(shù)組中每一個(gè)數(shù)據(jù)的內(nèi)容作為二進(jìn)制流,返回步驟12。如果是字符串類(lèi)型,對(duì)二進(jìn)制流采用字符串類(lèi)型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。具體地,在對(duì)二進(jìn)制流采用字符串類(lèi)型反序列處理方式進(jìn)行反序列處理時(shí),根據(jù)第二個(gè)字節(jié)代表的長(zhǎng)度,從后續(xù)的字節(jié)中獲取長(zhǎng)度為第二字節(jié)指示的長(zhǎng)度的內(nèi)容,采用UTF-8編碼格式解析出該內(nèi)容。在本步驟中,判斷非嵌套的二進(jìn)制流是數(shù)組類(lèi)型還是字符串類(lèi)型的具體方法如下根據(jù)該非嵌套的二進(jìn)制流中字節(jié)代表的位置和該位置對(duì)應(yīng)的內(nèi)容進(jìn)行判斷,如果存在至少兩個(gè)代表位置的字節(jié)的數(shù)值相同,則屬于數(shù)組類(lèi)型,否則,屬于字符串類(lèi)型。由于數(shù)組中存儲(chǔ)的數(shù)據(jù)可以包括上述各種類(lèi)型,因此,對(duì)數(shù)據(jù)的解析可以針對(duì)該數(shù)組中的每個(gè)數(shù)據(jù)單獨(dú)進(jìn)行解析,具體的解析方法可以采用上述步驟11至步驟19的過(guò)程,具體地,將數(shù)組中的每一個(gè)數(shù)據(jù)的內(nèi)容作為步驟11中獲取到的二進(jìn)制流,在步驟12中對(duì)其進(jìn)行解析,并繼續(xù)按照上述方法執(zhí)行到步驟19。循環(huán)執(zhí)行上述過(guò)程,對(duì)數(shù)組中的每一個(gè)數(shù)據(jù)對(duì)應(yīng)的內(nèi)容均進(jìn)行解析。在上述本發(fā)明實(shí)施例一中,對(duì)上述變體型解析、64比特型解析、32比特型解析、嵌套類(lèi)型解析和字符串類(lèi)型解析的具體方法不做限制,現(xiàn)有的任何能夠?qū)崿F(xiàn)相應(yīng)類(lèi)型解析的方法均可適用。以下介紹采用上述方法的一個(gè)具體實(shí)例。例如,在步驟11中獲取二進(jìn)制流為00001000,10010110,00000001。則在步驟12中,計(jì)息上述二進(jìn)制流,獲取其第一個(gè)字節(jié)00001000。該字節(jié)標(biāo)明了該二進(jìn)制流的位置和類(lèi)型。其中,第O至2個(gè)比特為二進(jìn)制流中的類(lèi)型特征比特,即代表類(lèi)型。第3至7個(gè)比特代表該比特是該類(lèi)型中的第幾個(gè)序列,即代表位置。根據(jù)第O至2個(gè)比特為000,步驟13中可以獲知該二進(jìn)制流的類(lèi)型為變體型。根據(jù)第3至7個(gè)比特為00001,可以獲知該字節(jié)為位置為I的字節(jié)。在步驟14中,獲取第二個(gè)字節(jié)10010110和第三個(gè)字節(jié)00000001。第二個(gè)字節(jié)的最高位為1,第三個(gè)字節(jié)的最高位為0,說(shuō)明第三個(gè)字節(jié)是該變體型二進(jìn)制流反序列化后的最后一個(gè)字節(jié)。然后,去掉全部字節(jié)的最高位,獲得去掉最高位之后的第二個(gè)字節(jié)0010110和去掉最高位之后的第三個(gè)字節(jié)0000001。對(duì)去掉全部字節(jié)的最高位的全部字節(jié)從右向左排列,得到反序列化的結(jié)果0000001,0010110,將其轉(zhuǎn)換為整型數(shù)據(jù),128+16+4+2 = 150,從而獲得該二進(jìn)制碼流的內(nèi)容信息為150。圖4是本發(fā)明實(shí)施例二的反序列化方法的流程圖。如圖4所示,該反序列化方法包括如下過(guò)程。步驟41 :獲取經(jīng)序列化的二進(jìn)制流。步驟42 :解析二進(jìn)制流,獲取二進(jìn)制流中的類(lèi)型特征比特。步驟43 :根據(jù)類(lèi)型特征比特判斷二進(jìn)制流的序列類(lèi)型。步驟44:根據(jù)得到的序列類(lèi)型對(duì)二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。其中,步驟41至步驟43的具體過(guò)程可以參見(jiàn)圖1所示的本發(fā)明實(shí)施例一的步驟11至步驟13,步驟44可以包括圖1所示的本發(fā)明實(shí)施例一的步驟14至步驟19,在此不再贅述。圖5是本發(fā)明實(shí)施例三的數(shù)據(jù)交換系統(tǒng)的結(jié)構(gòu)示意圖。如圖5所示,該裝置包括數(shù)據(jù)源端51和應(yīng)用端52。其中,數(shù)據(jù)源端51對(duì)原始數(shù)據(jù)采用Protobuffer數(shù)據(jù)交換方式進(jìn)行序列化,得到
二進(jìn)制流。應(yīng)用端52獲取經(jīng)序列化的二進(jìn)制流,解析二進(jìn)制流,獲取二進(jìn)制流中的類(lèi)型特征比特,根據(jù)類(lèi)型特征比特判斷二進(jìn)制流的序列類(lèi)型,根據(jù)得到的序列類(lèi)型對(duì)二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。
在上述技術(shù)方案的基礎(chǔ)上,具體地,應(yīng)用端52解析二進(jìn)制流,得到二進(jìn)制流的第一個(gè)字節(jié),讀取二進(jìn)制流的第一個(gè)字節(jié)的第O至2個(gè)比特的值,得到二進(jìn)制流中的類(lèi)型特征比特。在上述技術(shù)方案的基礎(chǔ)上,具體地,應(yīng)用端52將類(lèi)型特征值與預(yù)置二進(jìn)制流類(lèi)型相匹配,按匹配結(jié)果確定二進(jìn)制流對(duì)應(yīng)的類(lèi)型。在上述技術(shù)方案的基礎(chǔ)上,具體地,當(dāng)序列類(lèi)型為變體型時(shí),應(yīng)用端52對(duì)二進(jìn)制流采用變體型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。當(dāng)序列類(lèi)型為64比特型時(shí),應(yīng)用端52對(duì)二進(jìn)制流采用64比特型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。當(dāng)系列類(lèi)型為32比特型時(shí),應(yīng)用端52對(duì)二進(jìn)制流采用32比特型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。當(dāng)序列類(lèi)型為長(zhǎng)度限定型時(shí),應(yīng)用端52對(duì)二進(jìn)制流采用長(zhǎng)度限定型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。具體地,當(dāng)序列類(lèi)型為長(zhǎng)度限定型時(shí),應(yīng)用端52根據(jù)預(yù)設(shè)規(guī)則判斷二進(jìn)制流是否屬于嵌套類(lèi)型。是則對(duì)二進(jìn)制流采用嵌套類(lèi)型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。否則判斷二進(jìn)制流是數(shù)組類(lèi)型或字符串類(lèi)型。如果二進(jìn)制流是數(shù)組類(lèi)型,以數(shù)組中每一個(gè)數(shù)據(jù)的內(nèi)容作為二進(jìn)制流,解析二進(jìn)制流,獲取二進(jìn)制流中的類(lèi)型特征比特的步驟。如果二進(jìn)制流是字符串類(lèi)型,對(duì)二進(jìn)制流采用字符串類(lèi)型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。應(yīng)用端52根據(jù)預(yù)設(shè)規(guī)則判斷二進(jìn)制流是否屬于嵌套類(lèi)型時(shí),應(yīng)用端52判斷二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容是否有值。具體地,應(yīng)用端52獲取二進(jìn)制流中第3至7個(gè)比特為00001的字節(jié)。判斷二進(jìn)制流中第3至7個(gè)比特為00001的字節(jié)對(duì)應(yīng)的內(nèi)容是否為空或O。如果是,則二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容沒(méi)有值。否則,二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容有值。如果二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容有值,則二進(jìn)制流屬于嵌套類(lèi)型。否則,如果二進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容沒(méi)有值,二進(jìn)制流不屬于嵌套類(lèi)型。根據(jù)上述本發(fā)明具體實(shí)施方式
可見(jiàn),通過(guò)對(duì)序列化之后的二進(jìn)制流進(jìn)行解析,獲得其類(lèi)型特征比特,根據(jù)該類(lèi)型特征比特以及預(yù)設(shè)規(guī)則判斷該二進(jìn)制流的類(lèi)型,從而不必預(yù)先獲知二進(jìn)制流的類(lèi)型,就可以根據(jù)判斷獲得的類(lèi)型對(duì)應(yīng)的解析方法解析獲得反序列化結(jié)果。因?yàn)槟軌蚋鶕?jù)解析獲知二進(jìn)制流的類(lèi)型,所以不必在反序列化之前預(yù)先獲知其類(lèi)型,因此,本發(fā)明提出的反序列化方法比現(xiàn)有的反序列化方法的靈活性更強(qiáng),應(yīng)用范圍更廣。 以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種數(shù)據(jù)交換方法,其特征在于,所述方法包括 數(shù)據(jù)源端對(duì)原始數(shù)據(jù)采用ProtobufTer數(shù)據(jù)交換方式進(jìn)行序列化,得到ニ進(jìn)制流; 應(yīng)用端獲取經(jīng)序列化的ニ進(jìn)制流; 解析所述ニ進(jìn)制流,獲取所述ニ進(jìn)制流中的類(lèi)型特征比特; 根據(jù)所述類(lèi)型特征比特判斷所述ニ進(jìn)制流的序列類(lèi)型; 根據(jù)得到的序列類(lèi)型對(duì)所述ニ進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述解析所述ニ進(jìn)制流,獲取所述ニ進(jìn)制流中的類(lèi)型特征比特包括 解析所述ニ進(jìn)制流,得到所述ニ進(jìn)制流的第一個(gè)字節(jié); 讀取所述ニ進(jìn)制流的第一個(gè)字節(jié)的第0至2個(gè)比特的值,得到所述ニ進(jìn)制流中的類(lèi)型特征比特。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述類(lèi)型特征比特判斷所述ニ進(jìn)制流的類(lèi)型包括 將所述類(lèi)型特征值與預(yù)置ニ進(jìn)制流類(lèi)型相匹配,按匹配結(jié)果確定ニ進(jìn)制流對(duì)應(yīng)的類(lèi)型。
4.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的方法,其特征在于,所述根據(jù)得到的序列類(lèi)型對(duì)所述ニ進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)包括 當(dāng)所述序列類(lèi)型為變體型時(shí),對(duì)所述ニ進(jìn)制流采用變體型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù); 當(dāng)所述序列類(lèi)型為64比特型時(shí),對(duì)所述ニ進(jìn)制流采用64比特型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù); 當(dāng)所述系列類(lèi)型為32比特型時(shí),對(duì)所述ニ進(jìn)制流采用32比特型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù); 當(dāng)所述序列類(lèi)型為長(zhǎng)度限定型時(shí),對(duì)所述ニ進(jìn)制流采用長(zhǎng)度限定型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述對(duì)所述ニ進(jìn)制流采用長(zhǎng)度限定型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)包括 根據(jù)預(yù)設(shè)規(guī)則判斷所述ニ進(jìn)制流是否屬于嵌套類(lèi)型; 是則,對(duì)所述ニ進(jìn)制流采用嵌套類(lèi)型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù); 否則,判斷所述ニ進(jìn)制流是數(shù)組類(lèi)型或字符串類(lèi)型; 如果所述ニ進(jìn)制流是數(shù)組類(lèi)型,以數(shù)組中每ー個(gè)數(shù)據(jù)的內(nèi)容作為ニ進(jìn)制流,執(zhí)行所述解析所述ニ進(jìn)制流,獲取所述ニ進(jìn)制流中的類(lèi)型特征比特的步驟; 如果所述ニ進(jìn)制流是字符串類(lèi)型,對(duì)所述ニ進(jìn)制流采用字符串類(lèi)型反序列處理方式進(jìn)行反序列處理,得到原始數(shù)據(jù)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述根據(jù)所述預(yù)設(shè)規(guī)則判斷所述ニ進(jìn)制流是否屬于嵌套類(lèi)型包括 判斷所述ニ進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容是否有值; 如果是,則所述ニ進(jìn)制流屬于嵌套類(lèi)型;否則,所述ニ進(jìn)制流不屬于嵌套類(lèi)型。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述判斷所述ニ進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容是否有值包括 獲取所述ニ進(jìn)制流中第3至7個(gè)比特為OOOOl的字節(jié); 判斷所述ニ進(jìn)制流中第3至7個(gè)比特為00001的字節(jié)對(duì)應(yīng)的內(nèi)容是否為空或0 ; 如果是,則所述ニ進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容沒(méi)有值; 否則,所述ニ進(jìn)制流的第I個(gè)位置對(duì)應(yīng)的內(nèi)容有值。
8.ー種反序列化方法,其特征在于,所述方法包括 獲取經(jīng)序列化的ニ進(jìn)制流; 解析所述ニ進(jìn)制流,獲取所述ニ進(jìn)制流中的類(lèi)型特征比特; 根據(jù)所述類(lèi)型特征比特判斷所述ニ進(jìn)制流的序列類(lèi)型; 根據(jù)得到的序列類(lèi)型對(duì)所述ニ進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。
9.一種數(shù)據(jù)交換系統(tǒng),其特征在于,包括 數(shù)據(jù)源端,用于對(duì)原始數(shù)據(jù)采用ProtobufTer數(shù)據(jù)交換方式進(jìn)行序列化,得到ニ進(jìn)制流; 應(yīng)用端,用于獲取經(jīng)序列化的ニ進(jìn)制流,解析所述ニ進(jìn)制流,獲取所述ニ進(jìn)制流中的類(lèi)型特征比特,根據(jù)所述類(lèi)型特征比特判斷所述ニ進(jìn)制流的序列類(lèi)型,根據(jù)得到的序列類(lèi)型對(duì)所述ニ進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在干, 所述應(yīng)用端具體用于獲取經(jīng)序列化的ニ進(jìn)制流,解析所述ニ進(jìn)制流,得到所述ニ進(jìn)制流的第一個(gè)字節(jié),讀取所述ニ進(jìn)制流的第一個(gè)字節(jié)的第0至2個(gè)比特的值,得到所述ニ進(jìn)制流中的類(lèi)型特征比特;將所述類(lèi)型特征值與預(yù)置ニ進(jìn)制流類(lèi)型相匹配,按匹配結(jié)果確定ニ進(jìn)制流對(duì)應(yīng)的類(lèi)型;根據(jù)得到的序列類(lèi)型對(duì)所述ニ進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。
全文摘要
本發(fā)明公開(kāi)了一種數(shù)據(jù)交換方法,數(shù)據(jù)源端對(duì)原始數(shù)據(jù)采用Protobuffer數(shù)據(jù)交換方式進(jìn)行序列化,得到二進(jìn)制流,應(yīng)用端獲取經(jīng)序列化的二進(jìn)制流,解析二進(jìn)制流,獲取二進(jìn)制流中的類(lèi)型特征比特,根據(jù)類(lèi)型特征比特判斷二進(jìn)制流的序列類(lèi)型,根據(jù)得到的序列類(lèi)型對(duì)二進(jìn)制流進(jìn)行對(duì)應(yīng)的反序列處理,得到原始數(shù)據(jù)。本發(fā)明還公開(kāi)了一種數(shù)據(jù)交換系統(tǒng)和反序列化方法。采用本發(fā)明公開(kāi)的數(shù)據(jù)交換方法、系統(tǒng)和反序列化方法,能夠提高反序列化的應(yīng)用靈活性并拓寬應(yīng)用范圍。
文檔編號(hào)H04L1/00GK103036641SQ201110299790
公開(kāi)日2013年4月10日 申請(qǐng)日期2011年9月29日 優(yōu)先權(quán)日2011年9月29日
發(fā)明者李凱, 劉李進(jìn) 申請(qǐng)人:北京新媒傳信科技有限公司