一、protobuf概述
Protobuf是一个google公司开发的用于数据交换的格式,他独立于语言与平台,跨平台性良好。其使用二进制的传输方式,相比xml更加灵活方便,效率更高。目前很多语言的版本都有,本文主要介绍c#版本的使用方法。
二、Protobuf的使用方法
1、protobuf下载与安装方法
本文使用的protobuf-net v2.4.1版本,下载方法可以自行百度下载。下载解压之后得到一个文件夹。之后,
(1)、把Google.ProtocolBuffers.dll、protoc.exe、ProtoGen.exe、ProtoGen.exe.config放于同一个文件夹之中
(2)、新建一个proto的文件,其中写入需要序列化的类
(3)、新建一个bat文件,写入:
echo on
protoc --descriptor_set_out=ProtoCSHead.protobin(该处为新建的proto文件名称.protobin) --include_imports ProtoCSHead.proto(此处为新建的proto文件名称.proto)
protogen ProtoCSHead.protobin(该处为新建的proto文件名称.protobin)
注:可以把多个类写入一个proto文件之中统一生成类库
(4)、双击bat文件运行即可得到c#的类库,把该类库导入解决方案之中即可
(5)、把Google.ProtocolBuffers.dll引入到解决方案之中
2、Protobuf的使用方法
序列化方面:
此处即为把相关类的各个字段填上相应的值,本文用CSHead.proto为例子。
message CSHead
{
optional uint32 command = 1 ;
optional uint32 subcmd = 2 ;
optional bytes uuid = 4 ;
optional uint32 route_key = 9 ;
}
(1)、序列化
CSHead.Builder myCSHeadBuilder = CSHead.CreateBuilder();
myCSHeadBuilder.SetCommand(1);
myCSHeadBuilder.SetSubcmd(2);
myCSHeadBuilder.SetUuid(ByteString.CopyFrom("3",Encoding.ASCII));
myCSHeadBuilder.SetRouteKey(4);
//此处cshead即为序列化后的CSHead类型的字符串
CSHead cshead = myCSHeadBuilder.Build();
//此处CSHeadBuffer即为序列化后的字节数组
byte[] CSHeadBuffer = cshead.ToByteArray();
(2)、反序列化
//此处的head字段为服务器返回的字节数组,cshed即为结果
CSHead cshed = CSHead.ParseFrom(head);
//此后可以使用cshed依次读取每个字段的值,例如:
uint aa = cshed.Command;
这就是protobuf使用的整个过程,该数据交换格式通常用于网络数据传输,作者是在做一个与服务器交互的程序时使用到,仅以此篇提示自我且回报网友。这是作者第一篇博文,希望以后多出回馈网络。赠人玫瑰,手留余香,谨以此句与君共勉。