一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式及其編解碼方法、系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開(kāi)了一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式及其編解碼方法、系統(tǒng),涉及網(wǎng)絡(luò)協(xié)議格式的編解碼技術(shù)領(lǐng)域。該網(wǎng)絡(luò)協(xié)議格式包括若干個(gè)數(shù)據(jù)項(xiàng),相鄰數(shù)據(jù)項(xiàng)之間通過(guò)數(shù)據(jù)項(xiàng)分隔符進(jìn)行分割;每個(gè)數(shù)據(jù)項(xiàng)由鍵值對(duì)表示,鍵值對(duì)分為有鍵的鍵值對(duì)和無(wú)鍵的鍵值對(duì);有鍵的鍵值對(duì)由鍵和值組成,鍵表示數(shù)據(jù)的名稱,值表示數(shù)據(jù)的具體值,鍵與值之間通過(guò)鍵值分隔符進(jìn)行分割;無(wú)鍵的鍵值對(duì)僅由值組成。本發(fā)明不但編解碼效率高,利于編解碼的實(shí)現(xiàn);而且編碼后占用大小較小,利于網(wǎng)絡(luò)數(shù)據(jù)的傳輸。
【專利說(shuō)明】
一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式及其編解碼方法、系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及網(wǎng)絡(luò)協(xié)議格式的編解碼技術(shù)領(lǐng)域,具體來(lái)講是一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式及其編解碼方法、系統(tǒng)。
【背景技術(shù)】
[0002]在通信領(lǐng)域中,為了達(dá)到在網(wǎng)絡(luò)上傳輸數(shù)據(jù)的目的,通常需要使用到網(wǎng)絡(luò)協(xié)議。目前,在網(wǎng)絡(luò)協(xié)議的設(shè)計(jì)中使用的最多最廣泛的網(wǎng)絡(luò)協(xié)議格式是JSON(JavaScriPt Obj ectNotat1n) C3JSON格式是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于JavaScript ProgrammingLanguage (JavaScript 編程語(yǔ)言),Standard ECMA-262 3rd Edit1n-December 1999標(biāo)準(zhǔn)的一個(gè)子集,采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C,C++,c#,Java,JavaScript,Perl,Python等)。因JSON格式是一種基于可見(jiàn)字符的格式,所以易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。這些特性使JSON成為目前流行的數(shù)據(jù)交換語(yǔ)言。
[0003]但是,在實(shí)際使用過(guò)程中發(fā)現(xiàn),由于JSON本身使用了較多字符進(jìn)行格式控制,如:,{、}、[、]、“、”等字符,使得其編碼和解碼過(guò)程需要花費(fèi)過(guò)多的時(shí)間去處理,不利于編解碼的實(shí)現(xiàn),且編碼后占用大小較大,不利于網(wǎng)絡(luò)數(shù)據(jù)的傳輸。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式及其編解碼方法、系統(tǒng),不但編解碼效率高,利于編解碼的實(shí)現(xiàn);而且編碼后占用大小較小,利于網(wǎng)絡(luò)數(shù)據(jù)的傳輸。
[0005]為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:提供一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式,該網(wǎng)絡(luò)協(xié)議格式包括若干個(gè)數(shù)據(jù)項(xiàng),相鄰數(shù)據(jù)項(xiàng)之間通過(guò)數(shù)據(jù)項(xiàng)分隔符進(jìn)行分割;每個(gè)數(shù)據(jù)項(xiàng)由鍵值對(duì)表示,鍵值對(duì)分為有鍵的鍵值對(duì)和無(wú)鍵的鍵值對(duì);有鍵的鍵值對(duì)由鍵和值組成,鍵表示數(shù)據(jù)的名稱,值表示數(shù)據(jù)的具體值,鍵與值之間通過(guò)鍵值分隔符進(jìn)行分割;無(wú)鍵的鍵值對(duì)僅由值組成。
[0006]在上述技術(shù)方案的基礎(chǔ)上,所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為O=。
[0007]在上述技術(shù)方案的基礎(chǔ)上,所述網(wǎng)絡(luò)協(xié)議格式中所有數(shù)據(jù)項(xiàng)都有鍵或者所有數(shù)據(jù)項(xiàng)都無(wú)鍵。
[0008]在上述技術(shù)方案的基礎(chǔ)上,所述網(wǎng)絡(luò)協(xié)議格式中數(shù)據(jù)項(xiàng)的值為已編碼的網(wǎng)絡(luò)協(xié)議。
[0009]本發(fā)明還提供一種上述網(wǎng)絡(luò)協(xié)議的編解碼方法,該編解碼方法包括編碼流程和解碼流程;
[0010]編碼流程包括:A1、添加一項(xiàng)鍵值對(duì)數(shù)據(jù)到網(wǎng)絡(luò)協(xié)議中,判斷鍵值對(duì)是否為無(wú)鍵的鍵值對(duì),若是,轉(zhuǎn)入A4;若否,轉(zhuǎn)入A2; A2、將數(shù)據(jù)的數(shù)據(jù)名稱作為鍵值對(duì)的鍵添加到網(wǎng)絡(luò)協(xié)議中,轉(zhuǎn)入A3;A3、添加鍵值分隔符到協(xié)議中,以區(qū)分鍵和值,轉(zhuǎn)入A4;A4、將數(shù)據(jù)的具體值作為鍵值對(duì)的值添加到網(wǎng)絡(luò)協(xié)議中,轉(zhuǎn)入A5;A5、添加數(shù)據(jù)項(xiàng)分隔符到網(wǎng)絡(luò)協(xié)議中以區(qū)分各數(shù)據(jù)項(xiàng),轉(zhuǎn)入A6;A6、判斷是否還有數(shù)據(jù)需要添加到網(wǎng)絡(luò)協(xié)議中,若是,返回Al,繼續(xù)添加;若否,網(wǎng)絡(luò)協(xié)議編碼流程結(jié)束;
[0011 ]解碼流程包括:B1、標(biāo)記網(wǎng)絡(luò)協(xié)議的當(dāng)前字符位置為起始位置,從起始位置開(kāi)始查找分隔符,一旦查找到,則轉(zhuǎn)入B2; B2、判斷找到的分隔符是數(shù)據(jù)項(xiàng)分隔符還是鍵值分隔符,若為鍵值分隔符,轉(zhuǎn)入B3;若為數(shù)據(jù)項(xiàng)分隔符,轉(zhuǎn)入B4; B3、將起始位置到鍵值分隔符之間的字符作為鍵存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,若當(dāng)前數(shù)據(jù)項(xiàng)中已有鍵,則更新當(dāng)前數(shù)據(jù)項(xiàng)的鍵,返回BI; B4、將起始位置到數(shù)據(jù)項(xiàng)分隔符之間的字符作為值存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,轉(zhuǎn)入B5; B5、將當(dāng)前數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容保存至存儲(chǔ)隊(duì)列中,并清除當(dāng)前數(shù)據(jù)項(xiàng)中的內(nèi)容,轉(zhuǎn)入B6;B6、判斷當(dāng)前字符位置是否為網(wǎng)絡(luò)協(xié)議的尾部,若是,表明網(wǎng)絡(luò)協(xié)議已解析完,網(wǎng)絡(luò)協(xié)議編碼流程結(jié)束;否則返回BI,繼續(xù)解析。
[0012]在上述技術(shù)方案的基礎(chǔ)上,所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;步驟A2、A4中,若鍵中或值中包含有與分隔符產(chǎn)生歧義的特殊字符,則需將產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯,該轉(zhuǎn)譯操作具體包括:若鍵中或值中包含有@字符,則將所有@字符替換為@A;若鍵中或值中包含有/字符,則將所有/字符替換為OS。
[0013]在上述技術(shù)方案的基礎(chǔ)上,所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;步驟B3、B4中,均包括對(duì)鍵或值進(jìn)行反譯的操作,該反譯操作具體包括:若鍵中或值中包含有OA字符,則將所有M字符替換為O;若鍵中包含有OS字符,則將所有OS字符替換為/;若鍵中O字符后面接的不為A、S或=三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。
[0014]本發(fā)明還提供一種上述網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng),該系統(tǒng)包括編碼模塊和解碼模塊;所述編碼模塊包括鍵值對(duì)判斷子模塊、鍵添加子模塊、鍵值分隔符添加子模塊、值添加子模塊、數(shù)據(jù)項(xiàng)分隔符添加子模塊和編碼判斷子模塊;
[0015]其中,鍵值對(duì)判斷子模塊用于:收到編碼信號(hào)后,添加一項(xiàng)鍵值對(duì)數(shù)據(jù)到網(wǎng)絡(luò)協(xié)議中,判斷鍵值對(duì)是否為無(wú)鍵的鍵值對(duì),若是,向值添加子模塊發(fā)送添加值信號(hào);若否,向鍵添加子模塊發(fā)送鍵信號(hào);
[0016]鍵添加子模塊用于:收到鍵信號(hào)后,將數(shù)據(jù)的數(shù)據(jù)名稱作為鍵值對(duì)的鍵添加到網(wǎng)絡(luò)協(xié)議中,向鍵值分隔符添加子模塊發(fā)送鍵值分隔符信號(hào);
[0017]鍵值分隔符添加子模塊用于:收到鍵值分隔符信號(hào)后,添加鍵值分隔符到協(xié)議中以區(qū)分鍵和值,并向值添加子模塊發(fā)送值信號(hào);
[0018]值添加子模塊用于:收到值信號(hào)后,將數(shù)據(jù)的具體值作為鍵值對(duì)的值添加到網(wǎng)絡(luò)協(xié)議中,并向數(shù)據(jù)項(xiàng)分隔符添加子模塊發(fā)送數(shù)據(jù)項(xiàng)分隔符信號(hào);
[0019]數(shù)據(jù)項(xiàng)分隔符添加子模塊用于:收到數(shù)據(jù)項(xiàng)分隔符信號(hào)后,添加數(shù)據(jù)項(xiàng)分隔符到網(wǎng)絡(luò)協(xié)議中以區(qū)分各數(shù)據(jù)項(xiàng),并向編碼判斷子模塊發(fā)送編碼判斷信號(hào);
[0020]編碼判斷子模塊用于:收到編碼判斷信號(hào)后,判斷是否還有數(shù)據(jù)需要添加到網(wǎng)絡(luò)協(xié)議中,若是,向鍵值對(duì)判斷子模塊發(fā)送編碼信號(hào);否則,結(jié)束網(wǎng)絡(luò)協(xié)議編碼流程;
[0021]所述解碼模塊包括分隔符查找子模塊、分隔符判斷子模塊、鍵存儲(chǔ)子模塊、值存儲(chǔ)子模塊、解碼保存子模塊和解碼判斷子模塊;
[0022]其中,分隔符查找子模塊用于:收到查找信號(hào)后,標(biāo)記網(wǎng)絡(luò)協(xié)議的當(dāng)前字符位置為起始位置,從起始位置開(kāi)始查找分隔符,一旦查找到,向分隔符判斷子模塊發(fā)送分隔符判斷信號(hào);
[0023]分隔符判斷子模塊用于:收到分隔符判斷信號(hào)后,判斷找到的分隔符是數(shù)據(jù)項(xiàng)分隔符還是鍵值分隔符,若為鍵值分隔符,向鍵存儲(chǔ)子模塊發(fā)送鍵存儲(chǔ)信號(hào);若為數(shù)據(jù)項(xiàng)分隔符,向值存儲(chǔ)子模塊發(fā)送值存儲(chǔ)信號(hào);
[0024]鍵存儲(chǔ)子模塊用于:收到鍵存儲(chǔ)信號(hào)后,將起始位置到鍵值分隔符之間的字符作為鍵存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,若當(dāng)前數(shù)據(jù)項(xiàng)中已有鍵,則更新當(dāng)前數(shù)據(jù)項(xiàng)的鍵,并向分隔符查找子模塊發(fā)送查找信號(hào);
[0025]值存儲(chǔ)子模塊用于:收到值存儲(chǔ)信號(hào)后,將起始位置到數(shù)據(jù)項(xiàng)分隔符之間的字符作為值存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,并向解碼保存子模塊發(fā)送解碼保存信號(hào);
[0026]解碼保存子模塊用于:收到解碼保存信號(hào)后,將當(dāng)前數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容保存至存儲(chǔ)隊(duì)列中,并清除當(dāng)前數(shù)據(jù)項(xiàng)中的內(nèi)容,向解碼判斷子模塊發(fā)送解碼判斷信號(hào);
[0027]解碼判斷子模塊用于:收到解碼判斷信號(hào)后,判斷當(dāng)前字符位置是否為網(wǎng)絡(luò)協(xié)議的尾部,若是,結(jié)束網(wǎng)絡(luò)協(xié)議編碼流程;否則,向分隔符查找子模塊發(fā)送查找信號(hào)。
[0028]在上述技術(shù)方案的基礎(chǔ)上,所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;所述編碼模塊還包括轉(zhuǎn)譯子模塊,所述轉(zhuǎn)譯子模塊用于對(duì)鍵中或值中包含的與分隔符產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯;轉(zhuǎn)譯過(guò)程中,若鍵中或值中包含有@字符,則將所有@字符替換為@A;若鍵中或值中包含有/字符,則將所有/字符替換為OS。
[0029]在上述技術(shù)方案的基礎(chǔ)上,所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;所述解碼模塊還包括反譯子模塊,所述反譯子模塊用于對(duì)鍵或值進(jìn)行反譯;反譯過(guò)程中,若鍵中或值中包含有OA字符,則將所有@A字符替換為O;若鍵中包含有OS字符,則將所有OS字符替換為/;若鍵中@字符后面接的不為A、S或=三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。
[0030]本發(fā)明的有益效果在于:
[0031]1、本發(fā)明的網(wǎng)絡(luò)協(xié)議格式中,相鄰數(shù)據(jù)項(xiàng)之間通過(guò)數(shù)據(jù)項(xiàng)分隔符進(jìn)行分割;每個(gè)數(shù)據(jù)項(xiàng)由鍵值對(duì)表示,鍵值對(duì)分為有鍵的鍵值對(duì)和無(wú)鍵的鍵值對(duì);有鍵的鍵值對(duì)由鍵和值組成,鍵表示數(shù)據(jù)的名稱,值表示數(shù)據(jù)的具體值,鍵與值之間通過(guò)鍵值分隔符進(jìn)行分割;無(wú)鍵的鍵值對(duì)僅由值組成。與現(xiàn)有技術(shù)中的JSON格式相比,本發(fā)明使用的協(xié)議格式控制字符較少,最多僅有數(shù)據(jù)項(xiàng)分隔符和鍵值分隔符,結(jié)構(gòu)扁平,不但利于編解碼的實(shí)現(xiàn),使得編解碼效率高;而且編碼后占用大小較小,利于網(wǎng)絡(luò)數(shù)據(jù)的傳輸。
[0032]2、本發(fā)明中,為了避免鍵值對(duì)中的鍵和值因包含與分隔符相同的特殊字符而產(chǎn)生歧義,在編碼階段對(duì)鍵和值中的特殊字符進(jìn)行了轉(zhuǎn)譯;相應(yīng)地,在解碼階段也對(duì)鍵和值中的特殊字符進(jìn)行了反譯。通過(guò)特殊字符的轉(zhuǎn)譯、反譯操作,能進(jìn)一步提高編解碼過(guò)程中的準(zhǔn)確性及可靠性,減少錯(cuò)誤的產(chǎn)生。
[0033]3、在本發(fā)明的解碼過(guò)程中,僅采用一個(gè)當(dāng)前數(shù)據(jù)項(xiàng)來(lái)作為解析后數(shù)據(jù)內(nèi)容的轉(zhuǎn)存單元,這樣可以不必在每解碼一個(gè)數(shù)據(jù)項(xiàng)時(shí)重新分配內(nèi)存來(lái)存儲(chǔ)解析后的數(shù)據(jù)內(nèi)容(鍵和值),節(jié)省了重復(fù)分配和釋放內(nèi)存的時(shí)間,進(jìn)一步提升了解碼效率。
[0034]4、本發(fā)明的網(wǎng)絡(luò)協(xié)議格式繼承了JSON格式的優(yōu)點(diǎn),是一種基于可見(jiàn)字符的格式,所以易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。
【附圖說(shuō)明】
[0035]圖1為本發(fā)明實(shí)施例中網(wǎng)絡(luò)協(xié)議的編碼流程的示意圖;
[0036]圖2為本發(fā)明實(shí)施例中網(wǎng)絡(luò)協(xié)議的解碼流程的示意圖;
[0037]圖3為本發(fā)明實(shí)施例中網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0038]下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0039]本發(fā)明實(shí)施例提供一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式,該網(wǎng)絡(luò)協(xié)議格式包括若干個(gè)數(shù)據(jù)項(xiàng),相鄰數(shù)據(jù)項(xiàng)之間通過(guò)數(shù)據(jù)項(xiàng)分隔符進(jìn)行分割;每個(gè)數(shù)據(jù)項(xiàng)由鍵值對(duì)表示,鍵值對(duì)分為有鍵的鍵值對(duì)和無(wú)鍵的鍵值對(duì);有鍵的鍵值對(duì)由鍵(key)和值(value)組成,鍵表示數(shù)據(jù)的名稱,值表示數(shù)據(jù)的具體值,鍵與值之間通過(guò)鍵值分隔符進(jìn)行分割;無(wú)鍵的鍵值對(duì)僅由值(value)組成。有鍵的數(shù)據(jù)項(xiàng)可以通過(guò)鍵獲取,無(wú)鍵的數(shù)據(jù)項(xiàng)只能通過(guò)其出現(xiàn)在協(xié)議中的位置獲取。通常要么所有數(shù)據(jù)項(xiàng)都有鍵,即都為有鍵的鍵值對(duì);要么所有數(shù)據(jù)項(xiàng)都無(wú)鍵,即都為無(wú)鍵的鍵值對(duì),所有數(shù)據(jù)項(xiàng)都無(wú)鍵的協(xié)議稱為列表。
[0040]本實(shí)施例中,數(shù)據(jù)項(xiàng)分隔符為/,鍵值分隔符為@=。當(dāng)所有數(shù)據(jù)項(xiàng)均為有鍵的鍵值對(duì)時(shí),網(wǎng)絡(luò)協(xié)議格式如下:
[0041 ] keyli = valuel/key2i = value2/key3i = value3/......
[0042]當(dāng)所有數(shù)據(jù)項(xiàng)均為無(wú)鍵的鍵值對(duì)時(shí),網(wǎng)絡(luò)協(xié)議格式如下:
[0043]valuel/value2/value3/......
[0044]進(jìn)一步地,由于組成分隔符的字符串序列屬于特殊字符(特殊字符指相對(duì)于傳統(tǒng)或常用的符號(hào)外,使用頻率較少字符且難以直接輸入的符號(hào),比如數(shù)學(xué)符號(hào)、單位符號(hào)、制表符等),具體到本實(shí)施例中,數(shù)據(jù)項(xiàng)分隔符為/,鍵值分隔符為@=,如果鍵值對(duì)中的鍵和值也包含同樣的特殊字符,則會(huì)產(chǎn)生歧義,故需要對(duì)鍵和值中的會(huì)與分隔符產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯。具體來(lái)說(shuō),本實(shí)施例中,采用將鍵和值中出現(xiàn)的/替換為@S,@替換為OA的方式實(shí)現(xiàn)轉(zhuǎn)譯。
[0045]可以理解的是,編碼后的網(wǎng)絡(luò)協(xié)議又可以作為鍵值對(duì)中的值(value)部分,因此網(wǎng)絡(luò)協(xié)議格式還可以使用嵌套格式,即網(wǎng)絡(luò)協(xié)議格式中數(shù)據(jù)項(xiàng)(鍵值對(duì))的值為已編碼的網(wǎng)絡(luò)協(xié)議。例如:
[0046]keyli = kkliA = vvliSkk2iA = vv2iS/key2i = value2/
[0047]上述嵌套格式中,數(shù)據(jù)名稱為“keyl”的鍵值對(duì)的值即為已編碼的網(wǎng)絡(luò)協(xié)議格式“kkl@A = vvl@Skk2@A = vv2@S”。
[0048]參見(jiàn)圖1和圖2所示,本發(fā)明同時(shí)提供了一種上述網(wǎng)絡(luò)協(xié)議的編解碼方法,該方法包括編碼流程和解碼流程兩個(gè)步驟:
[0049]編碼流程具體包括以下步驟(如圖1所示):
[0050]步驟Al、添加一項(xiàng)鍵值對(duì)數(shù)據(jù)到網(wǎng)絡(luò)協(xié)議中,判斷鍵值對(duì)是否為無(wú)鍵的鍵值對(duì),若是,轉(zhuǎn)入步驟A4;若否,轉(zhuǎn)入步驟A2 ;
[0051 ]步驟A2、將數(shù)據(jù)的數(shù)據(jù)名稱作為鍵值對(duì)的鍵添加到網(wǎng)絡(luò)協(xié)議中,轉(zhuǎn)入步驟A3;
[0052]具體操作中,將鍵添加到網(wǎng)絡(luò)協(xié)議時(shí),若鍵中包含有會(huì)與分隔符產(chǎn)生歧義的特殊字符,則需將產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯,該轉(zhuǎn)譯操作如下:
[0053]a)若鍵中包含有O字符,則將所有O字符替換為OA;
[0054]b)若鍵中包含有/字符,則將所有/字符替換為OS。
[0055]步驟A3、添加鍵值分隔符到協(xié)議中,以區(qū)分鍵和值,所述鍵值分隔符為0=,轉(zhuǎn)入步驟A4;
[0056]步驟A4、將數(shù)據(jù)的具體值作為鍵值對(duì)的值添加到網(wǎng)絡(luò)協(xié)議中,轉(zhuǎn)入步驟A5;
[0057]具體操作中,將值添加到網(wǎng)絡(luò)協(xié)議時(shí),若值中包含有會(huì)與分隔符產(chǎn)生歧義的特殊字符,則需將產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯,該轉(zhuǎn)譯操作如下:
[0058]a)若值中包含有O字符,則將所有O字符替換為OA;
[0059]b)若值中包含有/字符,則將所有/字符替換為OS。
[0060]步驟A5、添加數(shù)據(jù)項(xiàng)分隔符到網(wǎng)絡(luò)協(xié)議中,以區(qū)分各數(shù)據(jù)項(xiàng),所述數(shù)據(jù)項(xiàng)分隔符為/,轉(zhuǎn)入步驟A6;
[0061]步驟A6、判斷是否還有數(shù)據(jù)需要添加到網(wǎng)絡(luò)協(xié)議中,若是,返回步驟Al,繼續(xù)添加;若否,網(wǎng)絡(luò)協(xié)議編碼流程結(jié)束。
[0062]解碼流程具體包括以下步驟(如圖2所示):
[0063]步驟B1、標(biāo)記網(wǎng)絡(luò)協(xié)議的當(dāng)前字符位置為起始位置,從起始位置開(kāi)始查找分隔符(數(shù)據(jù)項(xiàng)分隔符或者鍵值分隔符),一旦查找到,則轉(zhuǎn)入步驟B2;可以理解的是,進(jìn)行網(wǎng)絡(luò)協(xié)議解碼時(shí),是從網(wǎng)絡(luò)協(xié)議的頭開(kāi)始的,即首次標(biāo)記起始位置時(shí),網(wǎng)絡(luò)協(xié)議的當(dāng)前字符位置為網(wǎng)絡(luò)協(xié)議頭字符的位置;
[0064]步驟B2、判斷找到的分隔符是數(shù)據(jù)項(xiàng)分隔符還是鍵值分隔符,若為鍵值分隔符,則從起始位置到鍵值分隔符之間的字符均為鍵的內(nèi)容,轉(zhuǎn)入步驟B3;若為數(shù)據(jù)項(xiàng)分隔符,則從起始位置到數(shù)據(jù)項(xiàng)分隔符之間的字符為值的內(nèi)容,轉(zhuǎn)入步驟B4;
[0065]步驟B3、將起始位置到鍵值分隔符之間的字符作為鍵存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,若當(dāng)前數(shù)據(jù)項(xiàng)中已有鍵,則通過(guò)覆蓋的方式更新當(dāng)前數(shù)據(jù)項(xiàng)的鍵,返回步驟BI;具體操作中,由于編碼時(shí)將鍵中產(chǎn)生歧義的特殊字符進(jìn)行了轉(zhuǎn)譯,因此,解碼時(shí)需要對(duì)鍵進(jìn)行相反的轉(zhuǎn)譯(即反譯),該反譯操作如下:
[0066]a)若鍵中包含有OA字符,則將所有OA字符替換為O;
[0067]b)若鍵中包含有OS字符,則將所有OS字符替換為/;
[0068]c)若鍵中O字符后面接的不為A、SS =三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。
[0069]步驟B4、將起始位置到數(shù)據(jù)項(xiàng)分隔符之間的字符作為值存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,轉(zhuǎn)入步驟B5;具體操作中,由于編碼時(shí)將值中產(chǎn)生歧義的特殊字符進(jìn)行了轉(zhuǎn)譯,因此,解碼時(shí)需要對(duì)值進(jìn)行相反的轉(zhuǎn)譯(即反譯),該反譯操作如下:
[0070]a)若值中包含有OA字符,則將所有OA字符替換為O;
[0071]b)若值中包含有OS字符,則將所有OS字符替換為/;
[0072]c)若值中O字符后面接的不為A、SS =三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。
[0073]步驟B5、將當(dāng)前數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容保存至存儲(chǔ)隊(duì)列中(若當(dāng)前數(shù)據(jù)項(xiàng)有鍵有值,則將當(dāng)前數(shù)據(jù)項(xiàng)的鍵和值作為一條數(shù)據(jù)的解析內(nèi)容保存至存儲(chǔ)隊(duì)列中;若當(dāng)前數(shù)據(jù)項(xiàng)無(wú)鍵僅有值,則表明解析的數(shù)據(jù)項(xiàng)的鍵缺省,則只需將值進(jìn)行保存;保存在存儲(chǔ)隊(duì)列中的數(shù)據(jù)內(nèi)容則組成了解碼后的網(wǎng)絡(luò)協(xié)議);清除當(dāng)前數(shù)據(jù)項(xiàng)中的內(nèi)容,以備解析下一項(xiàng)數(shù)據(jù),轉(zhuǎn)入步驟B6??梢岳斫獾氖?,所述當(dāng)前數(shù)據(jù)項(xiàng)在解碼過(guò)程中是作為每條數(shù)據(jù)解析后數(shù)據(jù)內(nèi)容的轉(zhuǎn)存單元,因此,當(dāng)一條數(shù)據(jù)解析完成并保存至存儲(chǔ)隊(duì)列后,需要清空當(dāng)前數(shù)據(jù)項(xiàng)的內(nèi)容,以備解析下一項(xiàng)數(shù)據(jù)時(shí)使用。本發(fā)明中,采用一個(gè)當(dāng)前數(shù)據(jù)項(xiàng)來(lái)作為解析后數(shù)據(jù)內(nèi)容的轉(zhuǎn)存單元,這樣可以不必在每解碼一個(gè)數(shù)據(jù)項(xiàng)時(shí)重新分配內(nèi)存來(lái)存儲(chǔ)解析后的數(shù)據(jù)內(nèi)容(鍵和值),節(jié)省了重復(fù)分配和釋放內(nèi)存的時(shí)間,進(jìn)一步提升了解碼效率。
[0074]步驟B6、判斷當(dāng)前字符位置是否為網(wǎng)絡(luò)協(xié)議的尾部,若是,表明網(wǎng)絡(luò)協(xié)議已解析完,網(wǎng)絡(luò)協(xié)議編碼流程結(jié)束;若否,返回步驟BI,繼續(xù)解析。
[0075]參見(jiàn)圖3所示,本發(fā)明還提供了一種上述網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng),包括編碼模塊和解碼模塊。具體來(lái)說(shuō),所述編碼模塊包括鍵值對(duì)判斷子模塊、鍵添加子模塊、鍵值分隔符添加子模塊、值添加子模塊、數(shù)據(jù)項(xiàng)分隔符添加子模塊和編碼判斷子模塊。由于本實(shí)施例中,編碼模塊的上述子模塊的功能是與編碼流程操作一一對(duì)應(yīng)的,因此,此處不贅述(具體可參見(jiàn)
【發(fā)明內(nèi)容】
部分的相應(yīng)內(nèi)容)。另外,所述解碼模塊包括分隔符查找子模塊、分隔符判斷子模塊、鍵存儲(chǔ)子模塊、值存儲(chǔ)子模塊、解碼保存子模塊和解碼判斷子模塊。同樣,由于本實(shí)施例中,解碼模塊的上述子模塊的功能是與解碼流程操作一一對(duì)應(yīng)的,因此,此處也不贅述(具體可參見(jiàn)
【發(fā)明內(nèi)容】
部分的相應(yīng)內(nèi)容)。
[0076]進(jìn)一步地,為了避免鍵值對(duì)中的鍵和值因包含與分隔符相同的特殊字符而產(chǎn)生歧義,故需要對(duì)鍵和值中產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯。因此,為了實(shí)現(xiàn)上述轉(zhuǎn)譯功能,在編碼模塊內(nèi)部還增設(shè)有轉(zhuǎn)譯子模塊。所述轉(zhuǎn)譯子模塊用于對(duì)鍵中或值中包含的會(huì)與分隔符產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯;轉(zhuǎn)譯過(guò)程中,若鍵中或值中包含有@字符,則將所有@字符替換為@A;若鍵中或值中包含有/字符,則將所有/字符替換為OS。
[0077]在此基礎(chǔ)之上,由于編碼過(guò)程中對(duì)產(chǎn)生歧義的特殊字符進(jìn)行了轉(zhuǎn)譯操作,則相應(yīng)地,在解碼過(guò)程中需要對(duì)鍵和值進(jìn)行反譯。因此,在解碼模塊內(nèi)部也相應(yīng)增設(shè)有反譯子模塊。所述反譯子模塊用于對(duì)鍵或值進(jìn)行反譯;反譯過(guò)程中,若鍵中或值中包含有M字符,則將所有OA字符替換為O;若鍵中包含有OS字符,則將所有OS字符替換為/;若鍵中@字符后面接的不為A、S或=三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。
[0078]需要說(shuō)明的是:上述實(shí)施例提供的網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng)在進(jìn)行編解碼時(shí),僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可根據(jù)需要將上述功能分配由不同的功能模塊完成,即將系統(tǒng)的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。
[0079]本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說(shuō)明書(shū)中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
【主權(quán)項(xiàng)】
1.一種基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式,其特征在于:該網(wǎng)絡(luò)協(xié)議格式包括若干個(gè)數(shù)據(jù)項(xiàng),相鄰數(shù)據(jù)項(xiàng)之間通過(guò)數(shù)據(jù)項(xiàng)分隔符進(jìn)行分割;每個(gè)數(shù)據(jù)項(xiàng)由鍵值對(duì)表示,鍵值對(duì)分為有鍵的鍵值對(duì)和無(wú)鍵的鍵值對(duì);有鍵的鍵值對(duì)由鍵和值組成,鍵表示數(shù)據(jù)的名稱,值表示數(shù)據(jù)的具體值,鍵與值之間通過(guò)鍵值分隔符進(jìn)行分割;無(wú)鍵的鍵值對(duì)僅由值組成。2.如權(quán)利要求1所述的基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式,其特征在于:所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=。3.如權(quán)利要求1所述的基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式,其特征在于:所述網(wǎng)絡(luò)協(xié)議格式中所有數(shù)據(jù)項(xiàng)都有鍵或者所有數(shù)據(jù)項(xiàng)都無(wú)鍵。4.如權(quán)利要求1所述的基于可見(jiàn)字符的網(wǎng)絡(luò)協(xié)議格式,其特征在于:所述網(wǎng)絡(luò)協(xié)議格式中數(shù)據(jù)項(xiàng)的值為已編碼的網(wǎng)絡(luò)協(xié)議。5.—種基于權(quán)利要求1所述網(wǎng)絡(luò)協(xié)議格式的網(wǎng)絡(luò)協(xié)議的編解碼方法,其特征在于:該編解碼方法包括編碼流程和解碼流程; 編碼流程包括: Al、添加一項(xiàng)鍵值對(duì)數(shù)據(jù)到網(wǎng)絡(luò)協(xié)議中,判斷鍵值對(duì)是否為無(wú)鍵的鍵值對(duì),若是,轉(zhuǎn)入A4;若否,轉(zhuǎn)入A2; A2、將數(shù)據(jù)的數(shù)據(jù)名稱作為鍵值對(duì)的鍵添加到網(wǎng)絡(luò)協(xié)議中,轉(zhuǎn)入A3; A3、添加鍵值分隔符到協(xié)議中,以區(qū)分鍵和值,轉(zhuǎn)入A4; A4、將數(shù)據(jù)的具體值作為鍵值對(duì)的值添加到網(wǎng)絡(luò)協(xié)議中,轉(zhuǎn)入A5; A5、添加數(shù)據(jù)項(xiàng)分隔符到網(wǎng)絡(luò)協(xié)議中以區(qū)分各數(shù)據(jù)項(xiàng),轉(zhuǎn)入A6; A6、判斷是否還有數(shù)據(jù)需要添加到網(wǎng)絡(luò)協(xié)議中,若是,返回Al,繼續(xù)添加;若否,網(wǎng)絡(luò)協(xié)議編碼流程結(jié)束; 解碼流程包括: B1、標(biāo)記網(wǎng)絡(luò)協(xié)議的當(dāng)前字符位置為起始位置,從起始位置開(kāi)始查找分隔符,一旦查找到,則轉(zhuǎn)入B2; B2、判斷找到的分隔符是數(shù)據(jù)項(xiàng)分隔符還是鍵值分隔符,若為鍵值分隔符,轉(zhuǎn)入B3;若為數(shù)據(jù)項(xiàng)分隔符,轉(zhuǎn)入B4; B3、將起始位置到鍵值分隔符之間的字符作為鍵存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,若當(dāng)前數(shù)據(jù)項(xiàng)中已有鍵,則更新當(dāng)前數(shù)據(jù)項(xiàng)的鍵,返回BI; B4、將起始位置到數(shù)據(jù)項(xiàng)分隔符之間的字符作為值存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,轉(zhuǎn)入B5; B5、將當(dāng)前數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容保存至存儲(chǔ)隊(duì)列中,并清除當(dāng)前數(shù)據(jù)項(xiàng)中的內(nèi)容,轉(zhuǎn)入B6; B6、判斷當(dāng)前字符位置是否為網(wǎng)絡(luò)協(xié)議的尾部,若是,表明網(wǎng)絡(luò)協(xié)議已解析完,網(wǎng)絡(luò)協(xié)議編碼流程結(jié)束;否則返回BI,繼續(xù)解析。6.如權(quán)利要求5所述的網(wǎng)絡(luò)協(xié)議的編解碼方法,其特征在于:所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;步驟A2、A4中,若鍵中或值中包含有與分隔符產(chǎn)生歧義的特殊字符,則需將產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯,該轉(zhuǎn)譯操作具體包括:若鍵中或值中包含有@字符,則將所有@字符替換為@A;若鍵中或值中包含有/字符,則將所有/字符替換為OS。7.如權(quán)利要求5所述的網(wǎng)絡(luò)協(xié)議的編解碼方法,其特征在于:所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;步驟B3、B4中,均包括對(duì)鍵或值進(jìn)行反譯的操作,該反譯操作具體包括:若鍵中或值中包含有@A字符,則將所有OA字符替換為O;若鍵中包含有OS字符,則將所有OS字符替換為/;若鍵中@字符后面接的不為A、S或=三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。8.—種基于權(quán)利要求1所述網(wǎng)絡(luò)協(xié)議格式的網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng),其特征在于:該編解碼系統(tǒng)包括編碼模塊和解碼模塊; 所述編碼模塊包括鍵值對(duì)判斷子模塊、鍵添加子模塊、鍵值分隔符添加子模塊、值添加子模塊、數(shù)據(jù)項(xiàng)分隔符添加子模塊和編碼判斷子模塊; 其中,所述鍵值對(duì)判斷子模塊用于:收到編碼信號(hào)后,添加一項(xiàng)鍵值對(duì)數(shù)據(jù)到網(wǎng)絡(luò)協(xié)議中,判斷鍵值對(duì)是否為無(wú)鍵的鍵值對(duì),若是,向值添加子模塊發(fā)送添加值信號(hào);若否,向鍵添加子模塊發(fā)送鍵信號(hào); 所述鍵添加子模塊用于:收到鍵信號(hào)后,將數(shù)據(jù)的數(shù)據(jù)名稱作為鍵值對(duì)的鍵添加到網(wǎng)絡(luò)協(xié)議中,向鍵值分隔符添加子模塊發(fā)送鍵值分隔符信號(hào); 所述鍵值分隔符添加子模塊用于:收到鍵值分隔符信號(hào)后,添加鍵值分隔符到協(xié)議中以區(qū)分鍵和值,并向值添加子模塊發(fā)送值信號(hào); 所述值添加子模塊用于:收到值信號(hào)后,將數(shù)據(jù)的具體值作為鍵值對(duì)的值添加到網(wǎng)絡(luò)協(xié)議中,并向數(shù)據(jù)項(xiàng)分隔符添加子模塊發(fā)送數(shù)據(jù)項(xiàng)分隔符信號(hào); 所述數(shù)據(jù)項(xiàng)分隔符添加子模塊用于:收到數(shù)據(jù)項(xiàng)分隔符信號(hào)后,添加數(shù)據(jù)項(xiàng)分隔符到網(wǎng)絡(luò)協(xié)議中以區(qū)分各數(shù)據(jù)項(xiàng),并向編碼判斷子模塊發(fā)送編碼判斷信號(hào); 所述編碼判斷子模塊用于:收到編碼判斷信號(hào)后,判斷是否還有數(shù)據(jù)需要添加到網(wǎng)絡(luò)協(xié)議中,若是,向鍵值對(duì)判斷子模塊發(fā)送編碼信號(hào);否則,結(jié)束網(wǎng)絡(luò)協(xié)議編碼流程; 所述解碼模塊包括分隔符查找子模塊、分隔符判斷子模塊、鍵存儲(chǔ)子模塊、值存儲(chǔ)子模塊、解碼保存子模塊和解碼判斷子模塊; 其中,所述分隔符查找子模塊用于:收到查找信號(hào)后,標(biāo)記網(wǎng)絡(luò)協(xié)議的當(dāng)前字符位置為起始位置,從起始位置開(kāi)始查找分隔符,一旦查找到,向分隔符判斷子模塊發(fā)送分隔符判斷信號(hào); 所述分隔符判斷子模塊用于:收到分隔符判斷信號(hào)后,判斷找到的分隔符是數(shù)據(jù)項(xiàng)分隔符還是鍵值分隔符,若為鍵值分隔符,向鍵存儲(chǔ)子模塊發(fā)送鍵存儲(chǔ)信號(hào);若為數(shù)據(jù)項(xiàng)分隔符,向值存儲(chǔ)子模塊發(fā)送值存儲(chǔ)信號(hào); 所述鍵存儲(chǔ)子模塊用于:收到鍵存儲(chǔ)信號(hào)后,將起始位置到鍵值分隔符之間的字符作為鍵存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,若當(dāng)前數(shù)據(jù)項(xiàng)中已有鍵,則更新當(dāng)前數(shù)據(jù)項(xiàng)的鍵,并向分隔符查找子模塊發(fā)送查找信號(hào); 所述值存儲(chǔ)子模塊用于:收到值存儲(chǔ)信號(hào)后,將起始位置到數(shù)據(jù)項(xiàng)分隔符之間的字符作為值存儲(chǔ)至當(dāng)前數(shù)據(jù)項(xiàng)中,并向解碼保存子模塊發(fā)送解碼保存信號(hào); 所述解碼保存子模塊用于:收到解碼保存信號(hào)后,將當(dāng)前數(shù)據(jù)項(xiàng)的數(shù)據(jù)內(nèi)容保存至存儲(chǔ)隊(duì)列中,并清除當(dāng)前數(shù)據(jù)項(xiàng)中的內(nèi)容,向解碼判斷子模塊發(fā)送解碼判斷信號(hào); 所述解碼判斷子模塊用于:收到解碼判斷信號(hào)后,判斷當(dāng)前字符位置是否為網(wǎng)絡(luò)協(xié)議的尾部,若是,結(jié)束網(wǎng)絡(luò)協(xié)議編碼流程;否則,向分隔符查找子模塊發(fā)送查找信號(hào)。9.如權(quán)利要求8所述的網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng),其特征在于:所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;所述編碼模塊還包括轉(zhuǎn)譯子模塊,所述轉(zhuǎn)譯子模塊用于對(duì)鍵中或值中包含的與分隔符產(chǎn)生歧義的特殊字符進(jìn)行轉(zhuǎn)譯;轉(zhuǎn)譯過(guò)程中,若鍵中或值中包含有@字符,則將所有@字符替換為@A;若鍵中或值中包含有/字符,則將所有/字符替換為OS。10.如權(quán)利要求8所述的網(wǎng)絡(luò)協(xié)議的編解碼系統(tǒng),其特征在于:所述數(shù)據(jù)項(xiàng)分隔符為/;所述鍵值分隔符為@=;所述解碼模塊還包括反譯子模塊,所述反譯子模塊用于對(duì)鍵或值進(jìn)行反譯;反譯過(guò)程中,若鍵中或值中包含有OA字符,則將所有OA字符替換為O;若鍵中包含有OS字符,則將所有OS字符替換為/;若鍵中O字符后面接的不為A、S或=三者之一,則表明解析協(xié)議出錯(cuò),直接報(bào)錯(cuò)退出。
【文檔編號(hào)】H04L29/06GK106027512SQ201610322187
【公開(kāi)日】2016年10月12日
【申請(qǐng)日】2016年5月16日
【發(fā)明人】楊俊
【申請(qǐng)人】武漢斗魚(yú)網(wǎng)絡(luò)科技有限公司