亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Protobuf筆記以及Java Javascript使用實例

2019-11-08 18:28:49
字體:
來源:轉載
供稿:網友

Google PRotocol Buffer

1.協議介紹:

Google Protocol Buffer是google 的一種數據交換的格式,它獨立于語言,獨立于平臺。google 提供了多種語言的實現:java、c#、c++、go、python、js等,每一種實現都包含了相應語言的編譯器以及庫文件。由于它是一種二進制的格式,比使用 xml 進行數據交換快許多??梢园阉糜诜植际綉弥g的數據通信或者異構環境下的數據交換。作為一種效率和兼容性都很優秀的二進制數據傳輸格式,可以用于諸如網絡傳輸、配置文件、數據存儲等諸多領域。

2.使用說明:

2.1proto文件說明:

不管是同種語言還是不同語言,在使用Protobuf進行數據交互的時候需要統一的一個數據結構。這個數據結構使用.proto后綴,并使用proto的特殊語法進行定義。此文件格式如下:
syntax="proto2" //語法格式 package tutorial; //包 //option:可賦值非必須賦值 java_package:java包名 option java_package = "com.example.tutorial"; //java類名,生成com.example.tutorial.AddressBookProtos java類 option java_outer_classname = "ProtoEntity"; option csharp_namespace = "Google.ProtocolBuffers.Examples.AddressBook"; //message定義所需要序列化的數據的格式。每一個Message都是一個小的信息邏輯單元, //包含了一些列的name-value對。 message Person { required string name = 1; //required必須賦值,是永久性的 required int32 id = 2; // Unique ID number for this person. optional string email = 3; enum PhoneType { //枚舉 MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } //repeated類似數組或集合(java里是list) repeated PhoneNumber phone = 4; } //用戶信息 message UserInfo { optional string userId=1;//用戶id optional string userNickname=2;//用戶昵稱 optional string userPicPath=3;//頭像地址 optional sint64 shopId=4;//商店id optional string tableId=5;//桌臺id optional string clearType=6;//清理類型 optional string orderId=7;//訂單id optional sint64 tag=8;//tag optional sint32 source=9[default=1];//來源 1微信 2pad } // Our address book file is just one of these. message AddressBook { repeated Person person = 1; }
由于Protobuf需要在多種語言之間進行交互,所以對于proto文件中的數據類型定義如下:

數據類型對比

2.2Java使用說明:

2.2.1在Java中使用Protobuf需要注意幾點:

1.java_package屬性:在class生成時,會在相對路徑后加上這個屬性對應的包名,在定義時需要與項目中你希望放Protobuf Class的路徑相同。 2.java_outer_classname屬性:這個屬性是在生成Class后的類名,下面包含的message都是這個class下的內部類。

2.2.2使用說明:

安裝protoc:
windows:首先需要在github的protobuf開源地址下載protoc進行安裝 mac:依次執行brew install automake brew install libtool brew install protobuf
protoc使用:
protoc --java_out=src/main/java/ src/main/resources/proto/shoppingcart.proto

java_out:生成的java文件輸出目錄 后面的指定的是proto文件的地址

2.2.3Usage:

下列使用上面2.1proto文件中的UserInfo對象來進行舉例:

2.2.3.1創建對象:
通過build的方式創建對象: ProtoEntity.UserInfo proUserInfo = ProtoEntity.UserInfo.newBuilder().setTableId("1234").setShopId(1234).setUserId("userid").setUserNickname("測試").setTag(1234444L).build();通過被編譯后的byte[]: ProtoEntity.UserInfo joinRoomUserInfo = ProtoEntity.UserInfo.parseFrom(data.getData());

同時Protobuf的對象parseFrom方法還有通過InputStream和ByteString對象來生成對象的方式。

2.2.3.2序列化對象:
序列化為byte[]: userInfo.toByteArray();

同時,protobuf的每個對象也可以序列化為InputStream和ByteString等。

2.4JS使用說明:

2.4.1Protobuf.js導入方式:

直接下載protobuf下載地址 使用npm install protobuf也可以安裝直接粘貼 <script src="http://cdn.rawgit.com/dcodeIO/protobuf.js/6.6.3/dist/protobuf.js"></script>

2.4.2Usage:

2.4.2.1創建對象:
protobuf.load("./js/proto/shoppingcart.proto", function (err, root) { if (err) throw err; var UserInfo = root.lookup("proto.UserInfo"); var message = UserInfo.create(userinfo); var encodedObj = UserInfo.encode(message).finish();
2.4.2.2序列化對象:
getProtoObj("./js/proto/shoppingcart.proto", "proto.UserInfo", data, function (result) { console.info(result); }); function getProtoObj(protoPath, objName, data, cb) { protobuf.load(protoPath, function (err, root) { if (err) throw err; var info = root.lookup(objName); var result = Uint8Array.from(JSON.parse(data).data);//此時jsprotobuf使用的是無符號byte數組,而java序列化后是帶符號的,所以需要先進行轉換成無符號的byte數組 cb(info.decode(result)) }); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情国产日韩精品一区18| 国产精品久久久久7777婷婷| 日本久久91av| 日韩欧美精品网址| 久久99热精品| 全亚洲最色的网站在线观看| 91a在线视频| 热99精品里视频精品| 国产精品96久久久久久| 色综合亚洲精品激情狠狠| 欧美性黄网官网| 亚洲国内高清视频| 九九热这里只有在线精品视| 久久精品青青大伊人av| 亚洲国产精品嫩草影院久久| 亚洲视频网站在线观看| 欧美激情在线观看视频| 91精品视频在线免费观看| 亚洲精品98久久久久久中文字幕| 久久久精品999| 国产视频久久网| 粉嫩av一区二区三区免费野| 久久精品国产亚洲精品2020| 精品综合久久久久久97| 欧美激情视频网站| 欧美性猛交xxxx乱大交3| 日韩欧美在线观看| 欧美精品电影免费在线观看| 性亚洲最疯狂xxxx高清| 中文一区二区视频| 亚洲电影成人av99爱色| 日韩av网站电影| 亚洲电影免费观看高清完整版| 欧美激情一级欧美精品| 精品成人av一区| 中文字幕在线看视频国产欧美在线看完整| 久久全球大尺度高清视频| 4438全国亚洲精品在线观看视频| 亚洲精品国产精品国自产在线| 亚洲午夜色婷婷在线| 欧美日韩国产中字| 亚洲自拍欧美色图| 久久久国产一区| 欧美肥臀大乳一区二区免费视频| 亚洲爱爱爱爱爱| 九九久久久久久久久激情| 国产精品黄色影片导航在线观看| 九九热这里只有精品6| 亚洲丝袜在线视频| 国产欧美精品一区二区三区介绍| 岛国视频午夜一区免费在线观看| 精品亚洲夜色av98在线观看| 亚洲成人av片在线观看| 日韩国产欧美精品在线| 亚洲精品视频网上网址在线观看| 欧美日韩成人在线观看| 国产精品美乳在线观看| 亚洲自拍偷拍在线| 日韩福利视频在线观看| 日韩av免费在线观看| 欧美激情在线有限公司| 欧美大学生性色视频| 97视频com| 久久999免费视频| 国产精品香蕉av| 日韩精品视频在线| 欧美俄罗斯性视频| 久久综合伊人77777| 中文字幕一区二区三区电影| 欧美大片va欧美在线播放| 久久国产精品偷| 久久影院资源站| 国产免费一区二区三区在线观看| 国产成人精品午夜| 国产精品夫妻激情| 欧美亚洲伦理www| 日本精品在线视频| 欧洲美女7788成人免费视频| 日韩高清av一区二区三区| 久久亚洲精品网站| 久久免费福利视频| 国产91精品青草社区| 日韩有码在线电影| 91精品国产91久久久久久久久| 久久精品一区中文字幕| 欧美精品在线免费观看| 亚洲欧美日韩国产中文| 2023亚洲男人天堂| 日韩中文字幕视频| 91麻豆国产语对白在线观看| 日韩精品在线私人| 欧美日韩成人精品| 亚洲国产高清福利视频| 青青草99啪国产免费| 亚洲精品国产成人| 欧美日韩一区二区三区在线免费观看| 欧洲美女7788成人免费视频| 日本sm极度另类视频| www.久久久久| 国产日韩精品在线观看| 国产91ⅴ在线精品免费观看| 午夜精品一区二区三区在线播放| 色妞色视频一区二区三区四区| x99av成人免费| 午夜剧场成人观在线视频免费观看| 亚洲成人激情图| 性夜试看影院91社区| 不卡中文字幕av| 欧美成在线观看| 狠狠操狠狠色综合网| 欧美日韩在线视频一区| 91av在线播放视频| 欧美日韩国产中文精品字幕自在自线| 日韩精品在线观看视频| 亚洲欧洲中文天堂| 亚洲国产精品久久| 91性高湖久久久久久久久_久久99| 2019国产精品自在线拍国产不卡| 热久久这里只有| 亚洲黄色av女优在线观看| 国产精品白丝av嫩草影院| 欧美wwwwww| 国产精品电影久久久久电影网| 51精品在线观看| 日韩av在线免费播放| 欧美日韩亚洲天堂| 欧美成人精品影院| 日本欧美中文字幕| 亚洲女性裸体视频| 日韩av一卡二卡| 国产欧美精品一区二区| 久久精品成人一区二区三区| 97国产精品视频人人做人人爱| 伊人久久综合97精品| 亚洲欧美日韩久久久久久| 国产999精品| 91精品国产九九九久久久亚洲| 奇米影视亚洲狠狠色| 亚洲xxxx妇黄裸体| 欧美美最猛性xxxxxx| 亚洲成人黄色在线| 欧美激情一区二区久久久| 日韩精品中文字幕在线播放| 亚洲最大福利网站| 亚洲人成电影网站色…| 欧美日韩午夜激情| 中文字幕欧美视频在线| 亚洲精品国产成人| 日韩色av导航| 国产精品网红福利| 国产欧美精品日韩| 亚洲成年人影院在线| 国产一区二区三区在线免费观看| 欧美极品少妇全裸体| 欧美日韩激情视频| 欧美性生交xxxxx久久久| 久久综合久久八八| 精品丝袜一区二区三区| 亚洲成人激情视频| 久久国产精品久久久久久久久久| www.99久久热国产日韩欧美.com| 亚洲视频电影图片偷拍一区| 欧美视频在线观看免费网址| 精品视频9999|