protobuf是Google提供一个具有高效的协议数据交换格式工具库,可以用于网络通信和数据存储。
优点:
- 体积小
- 序列化速度快
- 传输速度快
- 向后兼容性好
- 加密性好
- 维护成本低
- 跨平台,跨语言,可扩展性高
缺点:
- 二进制格式导致可读性差
- 缺乏自描述(不配合结构体看不出什么作用)
- 通用性差
protobuf在egret中的使用
先给一个.proto文件
package common;
message SendMsg {
required string userName = 1;
required bool isTrue = 2;
optional int32 phone = 3;
}
message ReceiveMsg {
required int32 type = 1;
required SendMsg receive = 2; //返回一个结构体数组
}
加载序列化
let str:string = RES.getRes("common_proto"); //加载proto文件
//初始化消息体
let builder:dcodeIO.ProtoBuf.Builder = dcodeIO.ProtoBuf.newBuilder();
dcodeIO.ProtoBuf.loadProto(str, builder);
//构建对象
let protoroot = builder.build();
let Cls = protoroot.common["SendMsg"];
//传入数据
let msgObj = new Cls({userName:"test1",isTrue:false, phone:15206});
let msg = msgObj.encode(); //序列化
let msgDe = msgCls.decode(msg); //反序列化
console.log(msgDe);