麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Protobuf筆記以及Java Javascript使用實例

2019-11-08 18:28:49
字體:
供稿:網(wǎng)友

Google PRotocol Buffer

1.協(xié)議介紹:

Google Protocol Buffer是google 的一種數(shù)據(jù)交換的格式,它獨立于語言,獨立于平臺。google 提供了多種語言的實現(xiàn):java、c#、c++、go、python、js等,每一種實現(xiàn)都包含了相應(yīng)語言的編譯器以及庫文件。由于它是一種二進制的格式,比使用 xml 進行數(shù)據(jù)交換快許多。可以把它用于分布式應(yīng)用之間的數(shù)據(jù)通信或者異構(gòu)環(huán)境下的數(shù)據(jù)交換。作為一種效率和兼容性都很優(yōu)秀的二進制數(shù)據(jù)傳輸格式,可以用于諸如網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲等諸多領(lǐng)域。

2.使用說明:

2.1proto文件說明:

不管是同種語言還是不同語言,在使用Protobuf進行數(shù)據(jù)交互的時候需要統(tǒng)一的一個數(shù)據(jù)結(jié)構(gòu)。這個數(shù)據(jù)結(jié)構(gòu)使用.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定義所需要序列化的數(shù)據(jù)的格式。每一個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類似數(shù)組或集合(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文件中的數(shù)據(jù)類型定義如下:

數(shù)據(jù)類型對比

2.2Java使用說明:

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

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

2.2.2使用說明:

安裝protoc:
windows:首先需要在github的protobuf開源地址下載protoc進行安裝 mac:依次執(zhí)行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創(chuàng)建對象:
通過build的方式創(chuàng)建對象: 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導(dǎo)入方式:

直接下載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創(chuàng)建對象:
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數(shù)組,而java序列化后是帶符號的,所以需要先進行轉(zhuǎn)換成無符號的byte數(shù)組 cb(info.decode(result)) }); }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久免费视频在线 | 日日噜噜夜夜爽 | 欧美三级日本三级少妇99 | 99视频网址 | 可以看逼的视频 | 91看片王| 亚洲福利在线免费观看 | 成人一级免费视频 | 免费淫视频 | 99re热视频这里只精品 | 久久久99精品视频 | 草莓视频久久 | 亚洲网站在线观看 | 欧美a视频| 欧美日韩成人一区二区 | 欧美一级黄色片免费观看 | 中文字幕免费在线观看视频 | www.99热精品| 欧美日韩在线播放一区 | 中文字幕精品一二三四五六七八 | 亚洲视频在线观看免费 | 亚洲精品a在线观看 | 韩国三级日本三级香港三级黄 | 激情九九 | 天天草天天干天天 | 美女在线观看视频一区二区 | 国产成人精品视频在线 | 欧洲成人一区 | 手机免费看一级片 | 欧美成人午夜 | 欧美精品一二三区 | 亚洲综合91 | 亚洲天堂在线电影 | 亚洲成在人 | 国产成人av一区 | 日韩视频一区二区三区四区 | 国产美女三级做爰 | 成人国产精品一区二区毛片在线 | 少妇一级淫片免费看 | 日韩精品中文字幕一区二区 | 欧美色另类 |