C# Protobuf使用指南

一、protobuf概述

 

Protobuf是一个google公司开发的用于数据交换的格式,他独立于语言与平台,跨平台性良好。其使用二进制的传输方式,相比xml更加灵活方便,效率更高。目前很多语言的版本都有,本文主要介绍c#版本的使用方法。

 

二、Protobuf的使用方法

1、protobuf下载与安装方法

本文使用的protobuf-net v2.4.1版本,下载方法可以自行百度下载。下载解压之后得到一个文件夹。之后,

1)、把Google.ProtocolBuffers.dllprotoc.exeProtoGen.exeProtoGen.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 ; 
}

注意:此处command等字段的值为随意填写,没有具体意义。

(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();

注意:赋值时,对于uint32类型直接按照int型数据赋值即可;bytes类型数据在c#中为bytestring类型,赋值时需要使用ByteString.CopyForm(string text,encoding)方法来赋值,ByteString类型可以通过ToString()方法转换成string类型,string类型又可以通过相应转化的方法转换成int。此处使用哪种序列化后的类型,此处自行选择。

(2)、反序列化

//此处的head字段为服务器返回的字节数组,cshed即为结果                
CSHead cshed = CSHead.ParseFrom(head);
//此后可以使用cshed依次读取每个字段的值,例如:
 uint aa = cshed.Command;

三、总结

这就是protobuf使用的整个过程,该数据交换格式通常用于网络数据传输,作者是在做一个与服务器交互的程序时使用到,仅以此篇提示自我且回报网友。这是作者第一篇博文,希望以后多出回馈网络。赠人玫瑰,手留余香,谨以此句与君共勉。















  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值