999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種結構化數據交換格式及方法

2012-12-31 00:00:00蘇祖輝

摘要:本文提供一種結構化數據交換格式及方法,數據交換包的結構主要由數據項值對與數據記錄集兩種結構組成,能很簡明地描述數據,并使用特殊的不可輸入分隔符將數據項分開,包含數據項值對與數據記錄集的格式實現,只增加了很少的冗余數據,序列化編碼、解碼的方法簡單,體積小,編碼的效率較高,能支持文本和二進制數據,可直接閱讀。與XML、JSON等格式相比,有數據包小、數據交換速度快、應用方便等特點,可以把它用在C/S/S架構、B/S/S架構或分布式應用之間的數據通信,異構環境下的數據交換也適用。

關鍵詞:XML JSON 結構化數據交換

1 技術背景

隨著計算機技術的發展,計算機網絡的應用無處不在,應用軟件的架構也已脫離桌面式單機時代,發展到C/S(客戶/服務架構)、C/S/S(客戶/中間件應用服務/數據庫服務)、B/S/S(瀏覽器客戶/Web應用服務/數據庫服務)和分布式多層異構平臺。這些結構都能實現多客戶端、多并發和大型數據訪問的軟件管理信息系統,大大提高了信息流通的速度和效率,吸引了越來越多的企業、個人通過網絡從事其相關活動,基于網絡的數據交換和業務協作越來越頻繁。

數據交換的協議主要是基于TCP/IP、HTTP等底層協議,數據的訪問方法不同架構有不同的方式:

C/S主要使用數據庫服務器專有協議和數據格式,使用如SQL(結構化查詢語言)等方法,利用客戶端的開發工具(如PowerBuilder,Delphi,Vb等)實現數據的訪問。

C/S/S架構客戶端使用與中間件應用服務器的專有協議訪問,如Oracle Bea Tuxedo使用簡單的字串到復雜的FML等多種交換方式實現客戶端與中間件的數據交換。中間件與數據庫的訪問同C/S架構。

B/S/S是基于瀏覽器瘦客戶端,使用HTTP協議與WEB服務器交互,在文本交互方式的基礎上發展出如XML、JSON等開放的交換格式。

當前流行的數據交換格式和方案主要有XML、JSON和Google的Protocol buffer等。

XML:以文本格式描述數據的標記語言,缺點是用XML描述的數據比原始數據大很多,而且數據訪問解析比較慢,格式復雜,傳輸占用帶寬。服務器端和客戶端都需要花費大量代碼來解析XML,不論服務器端和客戶端代碼變的異常復雜和不容易維護,客戶端不同瀏覽器之間解析XML的方式不一致,需要重復編寫很多代碼,服務器端和客戶端解析XML花費資源和時間都較多。

JSON:(JavaScript Object Notation) 是一種輕量級的數據交換格式,它基于JavaScript Programming Language,相對于XML,它更加易讀。但JSON中的分隔符只限于單引號、小括號、中括號、大括號、冒號和逗號等可輸入字符,若數據內容中本身包含這些字符時,要做轉移處理,會增加解析的復雜度,且對于其它語言編碼解碼相對復雜。

Protocol buffer:是Google公司開源的結構化數據格式,功能類似XML,但結構復雜,編碼與解碼API比較復雜,編碼過程需要專門的編譯步驟,壓縮的二進制格式,無法直接閱讀。

2 一種結構化數據交換格式及方法

本文提供一種結構化數據交換格式及方法,數據交換包的結構主要由數據項值對與數據記錄集兩種結構組成,能很簡明地描述數據,并使用特殊的不可輸入分隔符將數據項分開,包含數據項值對與數據記錄集的格式實現,只增加了很少的冗余數據,序列化編碼、解碼的方法簡單,體積小,編碼的效率較高,能支持文本和二進制數據,可直接閱讀。與XML、JSON等格式相比,有數據包小、數據交換速度快、應用方便等特點,可以把它用在C/S/S架構、B/S/S架構或分布式應用之間的數據通信,異構環境下的數據交換也適用。如圖1

結構化數據交換格式由兩大數據區組成,一是數據項值對區,另一個是數據記錄集內容區,數據項值對也可以理解為數據域,由數據項的名稱和數據項的內容組成,這類數據項通常在軟件開發中簡稱為“值對”,值對的優點是在數據交換中每個數據項可以用唯一的名稱標識出來,在數據交換解析時可以用名稱直接取得該數據項的內容,可以提高解析速度,本文描述的結構中數據項值對以最小的冗余來描述,如圖2所示:

數據項名稱與數據項內容之間用不可輸入的字符分隔,該字符為ASCII碼為1的鍵盤不可輸入字符,數據項的內容中不易包含這類字符。數據項值對區由若干個數據項組成,本文描述提供的格式將不同的數據項之間由ASCII碼為2的字符分隔。數據項值對區結束由ASCII碼為6的字符表示。

數據項值對主要表達一維的數據,數據交換中還需要表達二維結構的數據,通常稱為數據記錄集,本文描述提供的格式將記錄集的描述進行了優化,同一個數據包中可包含一個以上的記錄集,每個記錄集有唯一的名稱,并將每個記錄集的屬性(主要有記錄集的名稱、記錄數和列名)以數據項值對形式放入了數據項值對區中,解析數據時可用名稱取得記錄集,并通過屬性項可以取得記錄集記錄數和記錄集的各列名稱,大大提高記錄集的解析速度。

數據記錄集的名稱屬性設計為一個特殊的數據項值對,該數據項值對的名稱為數據記錄集的名稱,該數據項值對的內容為一固定的記錄集標識符:[$],由美元符號和一對中括號組成。

數據記錄集的記錄數屬性由編碼時放入,該項的名稱為:“數據記錄集的名稱.rows”,該項的值為記錄數。

數據記錄集的各列號由一數據項表示,該項的名稱為:“數據記錄集的名稱.cols”,該項的內容是由各列名稱和ASCII碼為4的列分隔符組成,參見圖3:

數據記錄集內容區如圖4:

由若干個記錄集內容組成,每個記錄集的內容格式由名稱、行數據和結束符組成,記錄集內容開始處的名稱由三部分組成,一是標識起始符,由ASCII碼為3的字符和‘<’字符總共2個字符組成,第二部分是記錄集名稱,第三部分為標識結束符,由字符‘>’和ASCII碼為3的字符組成,行數據由每行數據組成,行與行之間由ASCII碼為5的字符分隔,行數據由數據集的各列加上ASCII碼為4的列分隔符組成,記錄集內容結束符與數據項值對區結束符相對,為ASCII碼為6的字符,數據記錄集內容區中的多個記錄集依次存放。

結構化數據交換格式(全局示意圖)如圖5:

3 結構化編碼方法

本文描述的結構化交換格式在編碼時相對簡易,與計算機語言無關,當前主流的語言與平臺都能實現,本文以Java語言的方式描述編碼的實施方式。

結構化數據交換格式編碼主要由以下關鍵步驟

3.1 分配數據交換的空間,開辟一個數據項值對區和一個數據記錄集內容區,如在Java中申明兩個String Buffer變量buf1和buf2。

3.2 寫入數據項值對,先寫入數據項的名稱,若該數據項的名稱為‘name1’,則buf1.append(‘name1’),依次寫入數據項名稱與內容的分隔符buf1.append(char(1)),再將數據項的內容寫入,如buf1.append(‘name1_value’),最后寫入與下一個數據項的分隔符buf1.append(char(2)),一個完整的數據項編碼過程結束。

3.3 若有多個數據項,按步驟2的方法依次寫入,所有的數據項寫完后,最后寫入數據項值對區的區結束符 buf1.append(char(6)),若本次編碼中有記錄集,應將記錄集的屬性數據項寫入到數據項區后才能寫入區結束符。

3.4 若有記錄集,寫入數據記錄集時,先將記錄集名稱按步驟2寫入,內容為”[$]”,buf2.append(“記錄集1 [$]”)。

3.5 完成步驟4后,將記錄集的記錄數按步驟2寫入,名稱為:記錄集名稱.rows ,內容為記錄數,如Java的list取記錄數為list名.size(),buf2.append(“記錄集1.rows 1000”)。

3.6 將記錄集的各列列名稱按步驟2寫入,名稱為:記錄集名稱.cols,內容是各列列名用ASCII碼為4的字符分隔,分隔字符個數為記錄集的列數減一,兩端無分隔符,buf2.append(“記錄集1.cols c1 c2 c3”)。

3.7 寫記錄集的內容,在數據記錄集內容區 buf2中,首先寫入記錄集標識起始符,為兩個字符,第一個是ASCII碼為3的字符,第二個為”<”,buf2.append(char(3)),buf2.append(“<”)。

3.8 在數據記錄集內容區 buf2中寫入記錄集的名稱,buf2.append(“記錄集1”)。

3.9 依次寫入記錄集標識結束符,與起始符對應為兩個字符,第一個是“>”,第二個是ASCII碼為3的字符,buf2.append(“>”),buf2.append(char(3))。

3.10 寫入數據記錄集的行數據,從記錄集的第一行開始,依次寫入,每一行的規則是:按列的順序(順序與記錄集的各列名屬性順序一致),寫入各列的內容,列之間用ASCII碼為4的字符分隔,最后一列后續不用些分隔,一行結束后寫入行結束符(ASCII 碼為5的字符),完成記錄集所有行的數據后,寫入記錄集數據區結束符(ASCII碼為6的字符)。

3.11 若有多個數據記錄集,按步驟4至步驟10方法寫入。

3.12 結構化數據交換格式解析主要由以下關鍵步驟:

對本文描述提供的結構化數據交換格式解析時,主要實現以下幾大解析功能:

①通過名稱取得指定數據項的內容。

②取得所有數據項名稱的列表或數組。

③通過名稱取得指定數據記錄集的游標句柄(或指針)。

④實現記錄集游標遍歷(單向或雙向)。

⑤通過列名稱取得當前記錄集游標所在行指定列的內容。

⑥通過列索引編號取得當前記錄集游標所在行指定列的內容。

4 結束語

對本文描述一種結構化數據交換格式,有一定的實用意義,能很簡明地描述數據,并使用特殊的不可輸入分隔符將數據項分開,包含數據項值對與數據記錄集的格式實現,只增加了很少的冗余數據,序列化編碼、解碼的方法簡單,體積小,編碼的效率較高。

參考文獻:

[1]Bruce Eckel(候捷)譯.Java編程思想.第二版.

主站蜘蛛池模板: 国产欧美视频在线观看| 久久久久免费精品国产| 尤物在线观看乱码| 性色在线视频精品| 亚洲浓毛av| 波多野结衣第一页| 亚洲AV无码乱码在线观看代蜜桃 | 国产乱人伦AV在线A| 免费A级毛片无码免费视频| 狼友视频一区二区三区| 亚洲国产av无码综合原创国产| 97亚洲色综久久精品| 在线看片中文字幕| 亚洲国产成人在线| 国产欧美日韩专区发布| 亚洲三级色| 呦女亚洲一区精品| 亚洲乱码精品久久久久..| 久久国产精品嫖妓| 久久亚洲AⅤ无码精品午夜麻豆| 中文字幕日韩丝袜一区| 国产高清又黄又嫩的免费视频网站| 日韩精品一区二区三区免费| 亚洲无码高清一区二区| 欧美性精品| 女人爽到高潮免费视频大全| 久久综合五月婷婷| 91在线激情在线观看| 老司机午夜精品视频你懂的| 亚洲综合色区在线播放2019| 视频二区中文无码| 久久狠狠色噜噜狠狠狠狠97视色| 日韩视频免费| 亚洲人成网站在线播放2019| 亚洲第一成年网| 国内精品自在欧美一区| 亚洲色无码专线精品观看| 亚洲第一成网站| 欧美中文字幕一区| 无码啪啪精品天堂浪潮av| 欧美午夜在线观看| 国产成人1024精品下载| 亚洲三级色| 无码高潮喷水在线观看| 99精品国产自在现线观看| 亚洲中文字幕av无码区| 久草国产在线观看| 国产又粗又猛又爽| 久久91精品牛牛| 亚洲天堂2014| 在线观看国产精品日本不卡网| 日本亚洲成高清一区二区三区| 深夜福利视频一区二区| 在线视频亚洲色图| 欧美色视频网站| 成人a免费α片在线视频网站| 国产一区二区三区精品欧美日韩| 中文字幕66页| 亚洲一区网站| 亚洲天堂日韩在线| 国内精品自在欧美一区| 2021国产乱人伦在线播放| 国产成人综合亚洲网址| 青青热久麻豆精品视频在线观看| 午夜毛片福利| 中文字幕啪啪| 高清视频一区| 国产主播喷水| 国产乱子伦视频在线播放 | 都市激情亚洲综合久久| 国产第一色| 国产成人精品亚洲日本对白优播| 欧美a级在线| 国产91九色在线播放| 91亚洲影院| 国产毛片一区| 99精品视频在线观看免费播放| 国产免费羞羞视频| 国产主播在线观看| 日韩精品成人网页视频在线 | 亚洲二区视频| 91麻豆国产在线|