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

代碼生成技術在數(shù)據(jù)序列化方面的應用

2019-09-10 07:22:44戚艷兵楊佳
計算機與網(wǎng)絡 2019年13期

戚艷兵 楊佳

摘要:作為提高軟件開發(fā)效率和開發(fā)質(zhì)量的一種技術,代碼生成技術一直受到軟件開發(fā)人員的重視。針對用于數(shù)據(jù)序列化的代碼生成技術在可移植性及封裝、解析效率等方面的問題,設計了一種可以快速生成數(shù)據(jù)序列化或反序列化代碼的方法。該方法以協(xié)議原型定義文件為基本輸入,通過嚴格高效的轉(zhuǎn)換策略,自動生成數(shù)據(jù)序列化或反序列化、日志以及邊界檢查等代碼。該方法具有數(shù)據(jù)結構輕便高效、代碼易于移植以及二進制數(shù)據(jù)流傳輸方式等優(yōu)點。通過實際項目應用表明,該數(shù)據(jù)序列化代碼生成技術有效提高了嵌入式應用軟件的開發(fā)效率及可移植性,并且實現(xiàn)了嵌入式平臺之間數(shù)據(jù)的高效可靠傳輸。

關鍵詞:代碼生成;序列化;邊界檢查;嵌入式平臺

中圖分類號:TP311文獻標志碼:A文章編號:1008-1739(2019)13-52-4

0引言

在通信與電子信息行業(yè),數(shù)據(jù)序列化技術一直是數(shù)據(jù)交換的重要組成部分[1]。尤其是在嵌入式軟件開發(fā)過程中,隨著規(guī)模的擴大和設計復雜度的提高,用戶需求或軟件設計框架變更的成本也越來越高,尤其是作為軟件工程重要組成部分的數(shù)據(jù)交換模塊,變更在所難免。加上大型軟件開發(fā)通常由很多人共同參與,編碼風格難以統(tǒng)一,編碼水平參差不齊,尤其是在數(shù)據(jù)序列化和參數(shù)邊界檢查過程中,容易出現(xiàn)問題。如何在保證系統(tǒng)可靠性和穩(wěn)定性的同時提高軟件開發(fā)效率,已經(jīng)成為嵌入式軟件開發(fā)中的重要問題。

代碼生成技術是一種利用程序生成代碼的技術[2],與手工書寫代碼相比,有效解決了人工編寫軟件代碼工作量大、錯誤率高的問題,大大提高了軟件開發(fā)效率和代碼質(zhì)量,降低了軟件開發(fā)風險。針對現(xiàn)有嵌入式平臺代碼生成器框架生成代碼固化[3-4]、無法體現(xiàn)業(yè)務過程以及使用不夠靈活等特點,提出了一種針對嵌入式平臺的數(shù)據(jù)序列化代碼生成方法。提供一種用來序列化結構化數(shù)據(jù)的代碼生成方法,可以使用該技術將格式化協(xié)議序列化或反序列化成需要傳輸?shù)臄?shù)據(jù)流。提供了統(tǒng)一且跨平臺的應用程序編程接口API,為嵌入式環(huán)境下的協(xié)議處理提供高效、靈活、具備嚴格邊界檢查的代碼生成技術。

1數(shù)據(jù)序列化代碼生成技術設計

嵌入式平臺的數(shù)據(jù)序列化代碼生成方法要考慮的需求[5-6]主要有運行效率、穩(wěn)定性和系統(tǒng)的開發(fā)效率。為了實現(xiàn)更簡單、更準確且更快捷的開發(fā),系統(tǒng)的可維護性一方面要盡量減少代碼中的循環(huán)和判斷分支,另外一方面是對通信協(xié)議進行修改不應導致需要重新編譯整個系統(tǒng),對代碼量和風格進行有效管理;改進后的系統(tǒng)應該提供方便統(tǒng)一的API。

數(shù)據(jù)序列化代碼生成框架如圖1所示,協(xié)議原型定義文件用于描述通信協(xié)議報文格式,輸入?yún)f(xié)議原型定義文件后需要對其進行檢查,協(xié)議解析模塊則負責將協(xié)議原型定義文件規(guī)范為代碼生成器能夠理解的格式,再根據(jù)模板引擎翻譯的設計模板結合系統(tǒng)參數(shù)生成對應的代碼。整個過程實現(xiàn)了將軟件平臺無關的協(xié)議報文格式翻譯成平臺相關的數(shù)據(jù)序列化代碼的過程。

1.1協(xié)議原型定義文件設計

數(shù)據(jù)通信過程中,需要采用一定的通信協(xié)議報文格式,而作為描述通信協(xié)議報文格式的一種手段,需要用到協(xié)議原型定義文件。只有收發(fā)雙方遵循約定好的固定格式收發(fā)數(shù)據(jù),平臺才能夠?qū)笪倪M行序列化和反序列化。

針對嵌入式平臺,通過設計自定義的描述性語言來良好地定義程序中需要用到數(shù)據(jù)格式。為了讓代碼生成方法實現(xiàn)高效靈活,使用的協(xié)議格式定義盡可能簡化。對應協(xié)議原型文件,一個數(shù)據(jù)流稱之為一個“message”,一個“message”對應一個C程序中的結構體,“message”之間可以嵌套;“message”中的每一行稱之為一個字段,一個字段描述一個程序中的數(shù)據(jù)類型,每個字段對應若干個字段標簽。

為了能夠準確描述每個字段的特征,需要對字段類型、字段聲明和字段標簽進行定義。為了支持跨平臺操作,需要根據(jù)字段特征對運行平臺的各個數(shù)據(jù)類型進行重新定義和內(nèi)存分配,根據(jù)父子數(shù)據(jù)流之間的關系判定每個字段的優(yōu)先級和嵌套關系。字段標簽還描述了字段的邊界特征,通過定義default,min,max,step標簽來規(guī)范字段數(shù)據(jù)的有效范圍,從而利用代碼生成器生成判斷序列化或反序列化的相關字段是否合法的代碼。

原型定義文件的數(shù)據(jù)結構如下:

1.2模板庫框架設計

通用的代碼生成系統(tǒng)模板原理是把靜態(tài)內(nèi)容寫成模板[7-8],把動態(tài)內(nèi)容用特殊標記嵌在模板內(nèi),然后通過代碼生成器將動態(tài)標記賦值,即可生成按照模板定制生成具體文件[9-10]。

不同于基于通用模板的代碼生成系統(tǒng),針對嵌入式平臺的數(shù)據(jù)交換格式化需求,設計了一套由操作系統(tǒng)抽象層、功能模板層和代碼模板層自下而上組成的模板庫,如圖2所示。

操作系統(tǒng)抽象層主要針對嵌入式平臺的系統(tǒng)API和內(nèi)存等特性進行管理。為了支持跨平臺操作,需要對操作系統(tǒng)進行抽象,根據(jù)字段類型針對平臺的各個數(shù)據(jù)類型進行重新定義,進行內(nèi)存管理,提供調(diào)試所需的底層函數(shù),檢測大小端模式并對不同平臺的系統(tǒng)API函數(shù)進行封裝、抽象。操作系統(tǒng)抽象層為功能模板層和代碼模板層提供了統(tǒng)一的接口使得生成的代碼滿足跨平臺數(shù)據(jù)交換格式化的需求。功能模板層作為中間層,主要為代碼模板層提供功能庫支持,如序列化與反序列化、日志輸出、邊界檢查以及功能開關等功能模板供上層調(diào)用。代碼模板層根據(jù)功能模板層和操作系統(tǒng)抽象層提供的內(nèi)容,通過代碼生成器對動態(tài)標記進行賦值,完成最終的代碼,并且能夠根據(jù)需要方便快捷地生成對應平臺下的動態(tài)、靜態(tài)鏈接庫。

1.3代碼生成模塊

根據(jù)協(xié)議原型定義文件描述通信協(xié)議報文格式,利用協(xié)議檢查模塊對輸入進行詳細檢查。然后,協(xié)議解析模塊負責將協(xié)議原型定義文件規(guī)范為代碼生成器能夠理解的格式,再結合用戶的輸入?yún)?shù),如大小端選擇,是否生成日志打印等參數(shù)輸入,選擇對應的代碼模板以及模板引擎,進行翻譯生成對應的代碼,實現(xiàn)將軟件平臺無關的協(xié)議報文格式翻譯成平臺相關的數(shù)據(jù)序列化代碼的過程,開發(fā)人員可對生成的代碼進行修改。

生成的代碼接口包括初始化協(xié)議結構體函數(shù)接口;負責網(wǎng)絡字節(jié)序、主機字節(jié)序轉(zhuǎn)換函數(shù)接口;負責日志輸出函數(shù)接口;協(xié)議結構體到序列化數(shù)據(jù)流的封裝代碼(序列化),序列化數(shù)據(jù)流到協(xié)議結構體的解析代碼(反序列化);負責字段的參數(shù)范圍檢查函數(shù)接口。例如,對于每個字段會生成一個參數(shù)范圍檢查函數(shù)(check)、一個獲取最大值函數(shù)(get_max_value)、一個獲取最小值函數(shù)(get_min_value)以及一個獲取默認值函數(shù)(get_default_value)。

2數(shù)據(jù)序列化代碼生成技術對比

序列化技術的發(fā)展從傳統(tǒng)的具有可讀性、結構嚴謹?shù)腦ML,到輕量級的數(shù)據(jù)交換格式JSON,再到Google的Protobuf,序列化領域里,各種解決方案都在不斷地改進和優(yōu)化以適應大數(shù)據(jù)時代的需求。

為了驗證本文提出的代碼生成技術在數(shù)據(jù)序列化方面的性能,提出了一個基于嵌入式平臺的基準化性能分析方案,選取了目前常用的序列化工具,包括XML,JSON,Google的proto-buf,用來測試其在嵌入式平臺下的性能。測試環(huán)境:MPC8360,基于powerpc e300核心,主頻533 Hz,512 M DDR2 SDRAM,Linux版本:2.6.30。所有工具均使用同一段協(xié)議數(shù)據(jù)。為了保證公平性,實例的所有字段都必須被解析,并且需要在不對字段進行壓縮的情況下進行,測試數(shù)據(jù)如圖3和圖4所示。

圖3中總時間開銷包括創(chuàng)建對象、序列化以及反序列化的總時間;單位ns。在給定條件下,綜合圖3性能數(shù)據(jù)對比可以發(fā)現(xiàn),對于一條消息數(shù)據(jù),XML,JSON的總時間開銷最長,而PROTO-BUF耗時較短,本文方法耗時最短。

圖4的字節(jié)數(shù)表示對象序列化之后的長度,即所占空間大小。在給定條件下,綜合圖4性能數(shù)據(jù)對比可以發(fā)現(xiàn),對于一條消息數(shù)據(jù),XML,JSON生成的消息長度最長,而PROTO-BUF較短,本文方法生成的消息長度最短。驗證結果表明,本文提出的針對數(shù)據(jù)序列化的代碼生成技術在嵌入式平臺的應用中與現(xiàn)有技術相比在時間和空間開銷上有一定的優(yōu)勢。而嵌入式領域中,時間和空間的開銷是2個極其重要的指標。

3應用實例

為了驗證數(shù)據(jù)序列化代碼生成技術能夠有效提高嵌入式應用軟件的開發(fā)效率及可擴展性,實現(xiàn)了嵌入式平臺之間數(shù)據(jù)的高效和可靠傳輸,選取了實際應用的基于網(wǎng)管代理與站控應用管理系統(tǒng),開發(fā)基于嵌入式IMX6Q核心板卡,操作系統(tǒng)為Linux。網(wǎng)管代理與站控應用管理系統(tǒng)負責完成對遠端站站內(nèi)本地通信設備的監(jiān)視與控制管理,并將本地設備參數(shù)及狀態(tài)向中心站設備管理系統(tǒng)發(fā)送,接收中心站的監(jiān)視管理。網(wǎng)管代理與站控應用管理系統(tǒng)具備實時監(jiān)控、快速響應和使用方便等特點。該平臺的數(shù)據(jù)序列化/反序列化使用了數(shù)據(jù)序列化代碼生成技術來實現(xiàn)。

網(wǎng)管代理與站控軟件采用B/S模式軟件架構,該系統(tǒng)由6個子系統(tǒng)構成:Web訪問服務、訪問控制單元、數(shù)據(jù)庫(DB)、數(shù)據(jù)訪問服務單元、設備采集單元以及日志管理單元組成。每個軟件單元又包含多個實現(xiàn)具體功能的軟件模塊,系統(tǒng)結構如圖5所示。

Web訪問服務負責與用戶進行交互,配置和監(jiān)控設備與鏈路信息。訪問控制單元負責協(xié)議轉(zhuǎn)換,分發(fā)指令。數(shù)據(jù)訪問服務單元為網(wǎng)管代理與站控軟件提供數(shù)據(jù)庫讀、寫訪問操作支持,為其他內(nèi)部軟件模塊提供公共的數(shù)據(jù)庫訪問能力。設備采集單元是站控軟件的前端處理進程,負責采集被管設備的運行參數(shù)、生成告警事件以及向被管設備轉(zhuǎn)發(fā)用戶的設備控制命令。日志管理單元支持包括運行日志、操作日志、通信日志及告警日志等信息。

Web訪問服務與訪問控制單元、訪問控制單元與設備采集單元、設備采集單元與數(shù)據(jù)訪問服務單元之間的數(shù)據(jù)交互均采用數(shù)據(jù)序列化代碼生成技術,序列化業(yè)務數(shù)據(jù)流程如圖6所示。

通過代碼生成技術在該系統(tǒng)的數(shù)據(jù)序列化方面的應用,基于業(yè)務過程的數(shù)據(jù)流能夠被快速實現(xiàn),為軟件的快速開發(fā)打下了良好的基礎。該系統(tǒng)軟件的設計更多的是對軟件框架和業(yè)務過程的綜合設計與實現(xiàn)。能夠快速開發(fā)軟件協(xié)議并能靈活應對協(xié)議變化的方法在系統(tǒng)的軟件研發(fā)中占據(jù)重要地位,基于本文代碼生成技術的優(yōu)勢是用戶根據(jù)需求自定義分層模板,分層結構使其易于復用;模板作為代碼的原型,生成的代碼可讀性強;模板與數(shù)據(jù)分離,當需修改代碼時,只需修改模板,易于維護。測試結果表明,該數(shù)據(jù)傳輸協(xié)議實現(xiàn)了網(wǎng)關和應用數(shù)據(jù)平臺之間數(shù)據(jù)的高效和可靠傳輸。

4結束語

針對嵌入式平臺的數(shù)據(jù)序列化需求,本文提出了一種代碼生成方法,使用該方法能夠?qū)⒓s定的通信協(xié)議序列化或反序列化成需要傳輸?shù)亩M制數(shù)據(jù)流。該方法以協(xié)議原型定義文件為基本輸入,通過嚴格高效的轉(zhuǎn)換策略,自動生成數(shù)據(jù)序列化或反序列化、日志輸出以及邊界檢查等代碼。生成的代碼具有一致的應用程序編程接口API,能夠為嵌入式環(huán)境下的協(xié)議處理提供高效、靈活、嚴格的邊界檢查服務。代碼具有良好的可讀性及可維護性,通過代碼生成工具的使用,極大地縮短了開發(fā)人員的工作量,有效提升了系統(tǒng)開發(fā)的效率、可維護性和可移植性。最后,在網(wǎng)管代理與站控的通信系統(tǒng)中,針對各個單元之間的數(shù)據(jù)序列化需求,引入了本文提出的代碼生成技術,在實際應用中得到了充分驗證。

參考文獻

[1]史棟杰.五種快速序列化框架的性能比較[J].電腦知識與技術,2010, 6(34):9710-9711.

[2]肖寒.J2EE平臺下代碼自動生成技術研究[J].電腦知識與技術,2009,5(20): 5421-5422,5434.

[3]張濤,黃強,毛磊雅,等.一個基于JSON的對象序列化算法[J].計算機工程與應用,2007,43(15):98-100,133.

[4]管太陽.基于模板的自動代碼生成技術的研究[D].成都:電子科技大學,2007.

[5]王海波,耿暉,姜吉發(fā),等.基于XML的數(shù)據(jù)交換的實現(xiàn)[J].計算機應用,2001, 21(4): 67-68.

[6]董玉明.代碼生成技術在管理信息系統(tǒng)開發(fā)中的研究與應用[D].長春:吉林大學,2012.

[7]劉青.基于Protocol Buffer的即時通信監(jiān)控系統(tǒng)設計與實現(xiàn)[D].武漢:華中科技大學,2013.

[8]魯杰,王永斌,劉宏波.基于XML的報務系統(tǒng)數(shù)據(jù)分發(fā)機制研究[J].計算機工程與設計, 2010, 31(12): 2707-2709.

[9] Alonso D,Vicente-Chicote C,Sanchez P,et al. Automatic Ada Code Generation Using a Model-Driven Engineering Approach[J]. Lecture notes in Computer Science,2007(4498): 168-179.

[10]胡晨光,嚴捷豐,高正東,等.一種類的序列化與反序列化框架[J].電腦知識與技術,2009,5(24):6739-6741.

主站蜘蛛池模板: 亚洲日韩精品无码专区97| 欧美专区日韩专区| 欧洲欧美人成免费全部视频| av尤物免费在线观看| 香蕉视频在线精品| 东京热一区二区三区无码视频| 91综合色区亚洲熟妇p| 99精品热视频这里只有精品7| 久久99精品国产麻豆宅宅| 全色黄大色大片免费久久老太| 国产精品视频系列专区| 亚洲欧洲一区二区三区| 中文字幕乱码中文乱码51精品| 91久久国产综合精品女同我| 亚洲小视频网站| 国产欧美日韩另类精彩视频| 国产精品久久久久久久伊一| 四虎成人精品| 青青草原国产免费av观看| 免费观看无遮挡www的小视频| 一级做a爰片久久免费| 亚洲成人高清无码| 三级欧美在线| 免费精品一区二区h| 国产一级毛片yw| 亚洲二区视频| 天天操天天噜| 国产综合色在线视频播放线视| 亚洲欧洲日韩久久狠狠爱| 色久综合在线| 欧美激情综合| 自拍中文字幕| 亚洲高清日韩heyzo| 欧美在线中文字幕| 欧类av怡春院| 黄色网站在线观看无码| 亚洲精品色AV无码看| 手机在线看片不卡中文字幕| 99视频只有精品| 日韩专区欧美| 性欧美在线| 国产视频a| 国产超碰一区二区三区| 2022国产无码在线| 国产视频 第一页| 97国产精品视频自在拍| 国产精品无码影视久久久久久久| 国产v精品成人免费视频71pao | 一级一级特黄女人精品毛片| 国产丝袜一区二区三区视频免下载| 日韩精品无码不卡无码| 综合亚洲色图| 亚洲欧洲综合| 91成人免费观看| 欧美日韩中文国产| 国产成熟女人性满足视频| 亚洲v日韩v欧美在线观看| a色毛片免费视频| 国产69精品久久| 久久精品国产91久久综合麻豆自制| 国产激爽爽爽大片在线观看| 精品国产成人a在线观看| h视频在线播放| 久热精品免费| 欧美区一区二区三| 一级毛片中文字幕| 国产剧情伊人| 国产成人精彩在线视频50| 91香蕉视频下载网站| 国产中文一区a级毛片视频| A级毛片无码久久精品免费| 国产自在线拍| 国产视频一二三区| 亚洲色图欧美一区| 久草网视频在线| 欧美成人a∨视频免费观看| 日本在线亚洲| 国产精品久久久久久久伊一| 日韩午夜片| 国产在线观看第二页| 国产精品护士| 亚洲系列中文字幕一区二区|