国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Protocol Buffer在Android企業(yè)云通訊錄中的應(yīng)用*

2012-06-27 05:59:38沈奇威
電信科學(xué) 2012年9期
關(guān)鍵詞:通訊錄解析編碼

殷 昊,沈奇威,王 純

(1.北京郵電大學(xué)網(wǎng)絡(luò)與交換技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室 北京100876;2.東信北郵信息技術(shù)有限公司北京100191)

1 引言

2007年,由Google公司推出的Android操作系統(tǒng),由于具有良好的開放性和平臺(tái)開發(fā)的便捷性等特點(diǎn),迅速得到許多廠商的支持,同時(shí)也受到廣大應(yīng)用開發(fā)者的追捧,市場(chǎng)份額迅速攀升[1],已躍居第一大手機(jī)操作系統(tǒng)。并且,每個(gè)成熟的企業(yè)都會(huì)維護(hù)一個(gè)員工通訊錄,而讓員工把企業(yè)通訊錄添加到手機(jī)通訊錄中會(huì)造成其通訊錄超量,故而可查詢、直接撥打、來電提示的Android企業(yè)通訊錄應(yīng)用便有了其實(shí)用價(jià)值,這些功能在Android應(yīng)用中實(shí)現(xiàn)都比較容易。又因?yàn)閱T工離職、新員工加入、員工信息變化等,企業(yè)通訊錄會(huì)經(jīng)常發(fā)生變化,因此采用在云端維護(hù)數(shù)據(jù)、應(yīng)用端更新的模式很為適合,服務(wù)器與終端之間更新的模式以及方式是整個(gè)應(yīng)用的核心環(huán)節(jié),需要滿足傳輸數(shù)據(jù)量小、時(shí)間耗費(fèi)短、安全性高等條件。

2 相關(guān)背景

目前大多數(shù) Android網(wǎng)絡(luò)應(yīng)用采用 XML(extensible markup language)或者 JSON(JavaScript object notation)等在傳統(tǒng)互聯(lián)網(wǎng)領(lǐng)域已經(jīng)被廣泛應(yīng)用的數(shù)據(jù)通信格式,其優(yōu)點(diǎn)是技術(shù)已經(jīng)被大多數(shù)開發(fā)者掌握,學(xué)習(xí)成本低,開發(fā)時(shí)不需要額外安裝編譯器,并且明文方式方便擴(kuò)展與調(diào)試。但是,這二者有著信息冗余度大、解析慢、明文傳輸?shù)热秉c(diǎn),解決這些問題需要額外的壓縮與解壓縮、加密與解密等方式,增加工作量的同時(shí),又使得編碼、解析的過程更慢。而相對(duì)于XML和 JSON,Google的另外一項(xiàng)技術(shù)Protobuf(Protocol Buffer)有著數(shù)據(jù)量小、解析快、安全性較高等優(yōu)點(diǎn),這些優(yōu)點(diǎn)都是移動(dòng)互聯(lián)網(wǎng)現(xiàn)在非常需要的特點(diǎn),也是企業(yè)云通訊錄進(jìn)行同步更新環(huán)節(jié)所需要的特點(diǎn)。

Protobuf是Google公司開發(fā)的一種數(shù)據(jù)描述語言,廣泛地應(yīng)用于Google內(nèi)部,用于結(jié)構(gòu)化數(shù)據(jù)的描述、傳輸和存儲(chǔ)[2],類似于 XML、JSON這樣的數(shù)據(jù)表示語言,其最大的特點(diǎn)是基于二進(jìn)制[3],因此比傳統(tǒng)的數(shù)據(jù)表示語言XML、JSON高效、短小得多。雖然是二進(jìn)制數(shù)據(jù)格式,但并沒有因此而讓使用變得復(fù)雜,開發(fā)人員通過按照一定的語法定義結(jié)構(gòu)化的消息格式(.proto文件),然后使用命令行工具中簡(jiǎn)單的命令語句,就可以自動(dòng)生成相關(guān)的代碼文件,可以支持Java、C++、python等語言環(huán)境,另外第三方擴(kuò)展支持更多語言。通過將生成的代碼文件包含在項(xiàng)目中,可以很輕松地調(diào)用相關(guān)方法來完成業(yè)務(wù)消息的編碼與解析工作。Protobuf庫在效率、數(shù)據(jù)大小、易用性上有著很好的性能,故而能在Google公司得到廣泛應(yīng)用。Google已經(jīng)將這樣一套框架開源發(fā)布,Protobuf能夠在更多的方面得到更廣泛的應(yīng)用,目前已經(jīng)正在使用的有超過 48 162種報(bào)文格式定義和超過12 183個(gè) .proto文件[4]。Protobuf的這些優(yōu)點(diǎn)使得其不僅在服務(wù)器通信以及存儲(chǔ)上有用武之地,同時(shí)在Android終端網(wǎng)絡(luò)應(yīng)用中,尤其是云端應(yīng)用中,使用也非常適合,減小數(shù)據(jù)傳輸流量的同時(shí)又能提高解析效率。

3 Protobuf在Android企業(yè)云通訊錄中使用

利用時(shí)間戳的方式,在云端記錄所有數(shù)據(jù)發(fā)生變化的時(shí)間戳,終端應(yīng)用發(fā)起更新時(shí),提交上次更新的時(shí)間戳,云端服務(wù)器便可提取出所有發(fā)生變化的數(shù)據(jù),只要注意時(shí)間戳要統(tǒng)一使用系統(tǒng)的時(shí)間戳,這種變量更新的模式就不難實(shí)現(xiàn)。數(shù)據(jù)一旦更新到客戶端應(yīng)用中,在應(yīng)用中實(shí)現(xiàn)查找、呼叫、發(fā)郵件、來電監(jiān)聽也都不難實(shí)現(xiàn)。目前很多個(gè)人通訊錄都有相關(guān)功能。整個(gè)企業(yè)云通訊錄應(yīng)用的核心在于如何將更新數(shù)據(jù)既快速又省流量地傳輸?shù)綉?yīng)用終端,以給用戶最好的使用體驗(yàn)。相對(duì)于目前普遍采用的JSON和XML數(shù)據(jù)格式,Protobuf數(shù)據(jù)格式具有數(shù)據(jù)小、解析快的特點(diǎn),將大大節(jié)省流量、節(jié)約同步耗時(shí),同時(shí),其非明文傳輸?shù)奶攸c(diǎn),也一定程度上起到加密作用。下面介紹Protobuf在Android企業(yè)云通訊錄中的應(yīng)用方法。

3.1 編寫結(jié)構(gòu)化的消息格式(.proto文件)

按照官方文檔的編寫規(guī)則以及員工的具體屬性,編寫數(shù)據(jù)消息格式文件(ebbook.proto)。

3.2 生成自動(dòng)存取類

首先把前面編譯生成的 protobuf-java-2.4.1.jar和編寫的.proto文件復(fù)制到同一個(gè)文件夾中,便于引用。使用Protobuf編譯器編譯ebbook.proto文件。打開命令行窗口,并定位到該文件夾中,運(yùn)行命令protoc--java_out=.ebbook.proto,執(zhí)行這個(gè)命令后會(huì)在當(dāng)前目錄下根據(jù)ebbook.proto定義的分組名路徑生成一個(gè)java文件Ebbook.java,提供數(shù)據(jù)的編碼、解碼以及其他很多相關(guān)的能力。

3.3 Jar分組引入

創(chuàng)建相關(guān)的工程,并將protobuf-java-2.4.1.jar引入到工程的引用庫中。

3.4 生成的文件引入

將Ebbook.java文件添加到Android應(yīng)用以及網(wǎng)絡(luò)服務(wù)器端工程的代碼文件中,注意分組名的一致。

3.5 使用Protobuf提供的編解碼能力

在本例中,在服務(wù)器端實(shí)現(xiàn)對(duì)更新的員工信息的編碼,而在終端應(yīng)用中接收編碼的信息并解析,然后添加到手機(jī)端的數(shù)據(jù)庫中。

3.5.1 服務(wù)器端

服務(wù)器端,從數(shù)據(jù)庫中查詢所有手機(jī)端上次更新時(shí)間戳之后的發(fā)生變化的數(shù)據(jù)項(xiàng),進(jìn)行Protobuf方式的編碼,具體代碼如下。

從代碼中可以看到,每一個(gè)員工的信息,會(huì)構(gòu)建一個(gè)EBer對(duì)象,所有EBer對(duì)象匯總到一個(gè)鏈表中,然后將該鏈表編碼到EBContact對(duì)象中。而EBer和EBContact類都是自動(dòng)生成的Ebbook的內(nèi)部類,實(shí)現(xiàn)Protobuf的編碼能力非常簡(jiǎn)單,并不會(huì)給使用者帶來麻煩。

生成的ebContact對(duì)象,采用如下方式發(fā)送到手機(jī)端。

response.setContentType("application/octet-stream");

3.5.2 客戶端

在客戶端,對(duì)獲取到的ebContact對(duì)象進(jìn)行解析也很方便,所用到的能力,也都是自動(dòng)生成的代碼中提供的,具體代碼如下。

其中的getData()方法可獲取HTTP(hyper text transport protocol,超文本傳輸協(xié)議)響應(yīng)的內(nèi)容,利用自動(dòng)生成的代碼提供的能力很容易就可以解析響應(yīng)的內(nèi)容。

在這個(gè)實(shí)例中,可以驗(yàn)證,Protobuf的確可以在Android網(wǎng)絡(luò)通信應(yīng)用中使用,并且使用很方便,但是具體性能如何,還需要進(jìn)一步比較測(cè)試。

4 Protobuf、XML、JSON 性能測(cè)試比較

在考慮一項(xiàng)技術(shù)的應(yīng)用時(shí),通常關(guān)注兩點(diǎn):使用的便捷性和使用的性能指標(biāo)。通過上面的介紹,筆者發(fā)現(xiàn),Google已經(jīng)為使用者做了足夠的工作,讓Protobuf的使用者可以很方便地引用其能力來實(shí)現(xiàn)相關(guān)的功能。但是,相對(duì)于大多數(shù)開發(fā)者非常熟悉的XML和JSON而言,使用Protobuf需要付出一點(diǎn)學(xué)習(xí)成本。

性能方面,官方文檔給出的之所以不只是用XML的理由為:Protobuf更簡(jiǎn)單,文件大小比XML小3~10倍,快20~100倍,更少的歧義,可以方便地生成數(shù)據(jù)存取類[5]。

為了更好地測(cè)試Protobuf的性能,筆者選擇目前在Android網(wǎng)絡(luò)應(yīng)用開發(fā)中最常用的兩種數(shù)據(jù)信息格式XML、JSON做對(duì)比,進(jìn)行測(cè)試。在性能測(cè)試中,關(guān)注兩點(diǎn),一是數(shù)據(jù)大小,直接關(guān)系到數(shù)據(jù)傳輸所耗費(fèi)的數(shù)據(jù)流量;二是從發(fā)起請(qǐng)求開始到結(jié)果呈現(xiàn),整個(gè)過程中耗費(fèi)的時(shí)間,這直接關(guān)系到用戶的體驗(yàn)。

實(shí)驗(yàn)所用的工程,沿用上面描述的企業(yè)通訊錄的例子,把XML、JSON方式的編解碼能力也擴(kuò)充到工程中,在手機(jī)端根據(jù)按鍵的不同,選擇發(fā)送不同的請(qǐng)求,服務(wù)器根據(jù)手機(jī)端應(yīng)用的請(qǐng)求進(jìn)行不同方式的編碼,以20組員工信息作為數(shù)據(jù)進(jìn)行時(shí)間與空間的測(cè)試。

4.1 空間測(cè)試

3種方式編碼結(jié)果的文件大小如圖1所示。

從圖1中可以看出,Protobuf方式的文件大小接近XML方式文件大小的1/4,符合官方文檔里面小3~10倍的說法,JSON較XML在文件大小方面也有明顯優(yōu)勢(shì),但是與Protobuf相比,還相差較多。同時(shí),這也意味著,在Android客戶端網(wǎng)絡(luò)應(yīng)用中使用Protobuf進(jìn)行數(shù)據(jù)交互,將為用戶節(jié)省將近3/4的流量。

4.2 時(shí)間測(cè)試

在客戶端點(diǎn)擊按鍵時(shí),記錄起始時(shí)間戳;在信息呈現(xiàn)出來時(shí),記錄結(jié)束時(shí)間戳,二者之差就是整體耗時(shí),這段時(shí)間也是用戶的等待時(shí)間,是影響用戶體驗(yàn)的重要因素,因此時(shí)間性能非常重要,比空間性能更易影響用戶體驗(yàn)。由于這段時(shí)間有多種因素影響,故而測(cè)試50組數(shù)據(jù),求平均值來做比較。使用galaxy nexus手機(jī)通過Wi-Fi連接到與服務(wù)器同一局域網(wǎng)內(nèi),測(cè)試結(jié)果如圖2所示;通過EDGE(enhanced data rate for GSM evolution)網(wǎng)絡(luò)連接到公網(wǎng)服務(wù)器,測(cè)試結(jié)果如圖3所示。

顯然,Protobuf的時(shí)間性能依然是最好的,其次是JSON,最差的還是XML,但是測(cè)試結(jié)果卻沒有官方文檔里面表述的快20~100倍那么多,差距比較小,這是因?yàn)檫@個(gè)時(shí)間里面包含著網(wǎng)絡(luò)傳輸?shù)臅r(shí)間,并且網(wǎng)絡(luò)傳輸時(shí)間在其中占有相當(dāng)大的比重。不過,筆者所關(guān)心的性能就是用戶感知到的時(shí)間,而不是純編碼和解析時(shí)間上究竟相差多少倍。從中也不難看出,其實(shí),不管是快多少倍,畢竟解析速度都是很快的,差距都是毫秒級(jí)的,也就是說,在解析時(shí)間上用戶難以感知到差距。另外,在EDGE網(wǎng)絡(luò)中,傳輸?shù)乃俣认鄬?duì)局域網(wǎng)Wi-Fi環(huán)境下要慢很多,傳輸速度決定整個(gè)更新操作的用戶感知時(shí)間,而Protobuf在空間上的優(yōu)勢(shì),大大節(jié)約傳輸時(shí)間,時(shí)間性能優(yōu)勢(shì)更明顯,故而用戶體驗(yàn)更好。

另外,安全性也是一個(gè)很重要的指標(biāo),Protobuf非明文傳輸,一定程度上,比直接使用XML和JSON安全性要高一些,但是,Protobuf并不是非常安全的數(shù)據(jù)傳輸格式,如保密級(jí)別要求較高,仍需要進(jìn)一步的加密措施。

5 結(jié)束語

Protobuf作為一種數(shù)據(jù)信息格式,在Google公司內(nèi)部已經(jīng)得到廣泛使用,其在空間性能、時(shí)間性能、易用性、安全性上有著明顯的優(yōu)勢(shì),而這些性能也是Android企業(yè)云通訊錄所需要的。經(jīng)過測(cè)試比較,將Protobuf技術(shù)引入到Android企業(yè)云通訊錄中,可以降低應(yīng)用流量耗費(fèi)、提高應(yīng)用信息呈現(xiàn)速度,同時(shí)基本不會(huì)增加開發(fā)者的代碼工作量。

1 李林濤,石慶民.Android智能手機(jī)操作系統(tǒng)的研究.科技信息,2011(25):80

2 宮唐小恒,李旭偉.Protocol Buffers——比XML快近100倍.電腦與信息技術(shù),2009,17(1):65~68

3 史棟杰.五種快速序列化框架的性能比較.電腦知識(shí)與技術(shù),2010,6(34):9710~9722

4 Google Protocol Buffer的使用和原理.http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/,2012

5 Protocol Buffer官方主頁.http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/overview.html,2012

6 Jianhua Feng,Jinhong Li.Google Protocol Buffers research and application in online game.Proceedings of 2011 13th IEEE Joint InternationalComputerScience and Information Technology Conference,Chongqing,China,2011

7 楊豐盛.Android應(yīng)用開發(fā)揭秘.北京:機(jī)械工業(yè)出版社,2010

8 朱丹丹,王純,郭盛興.基于TD-SCDMA電子相框的照片分享方案.計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(5):12~16

猜你喜歡
通訊錄解析編碼
本期石友通訊錄
寶藏(2021年6期)2021-07-20 06:12:30
三角函數(shù)解析式中ω的幾種求法
基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達(dá)圖像配準(zhǔn)
通訊錄
寶藏(2021年4期)2021-05-27 08:11:08
本期石友通訊錄
寶藏(2021年11期)2021-01-01 06:17:42
《全元詩》未編碼疑難字考辨十五則
美食通訊錄
子帶編碼在圖像壓縮編碼中的應(yīng)用
電子制作(2019年22期)2020-01-14 03:16:24
Genome and healthcare
睡夢(mèng)解析儀
敖汉旗| 万全县| 治县。| 涟源市| 清流县| 古田县| 丹东市| 叶城县| 清新县| 河北省| 徐州市| 辉县市| 绥江县| 六安市| 诏安县| 榕江县| 武山县| 四平市| 青岛市| 霍山县| 铁岭县| 门源| 娄底市| 石城县| 平阳县| 新绛县| 仲巴县| 安仁县| 阿城市| 达州市| 漳平市| 盐边县| 黄山市| 凤冈县| 广灵县| 获嘉县| 三台县| 平山县| 搜索| 林芝县| 屯门区|