protobuf-csharp-sport 的下載地址 : https://github.com/jskeet/protobuf-csharp-portgit
①,將下載的文件解壓:github
②,開啓BuildAll.bat在根目錄生成build_output 和 build_temp2個文件夾
(注意使用管理員權限打開BuildAll.bat , 否則會出現錯誤)
③,在生成的build_output成會生成一系列的工具(在其下的tools文件夾下),介紹以下:c#
①,將一個proto文件copy到tools文件夾
proto文件內容以下:markdown
package PB; message R_LoginVo{ required string name = 1; required string pwd = 2; required string sign = 3; } message A_LoginVo{ required int32 ty = 1; required ParamVo msg = 2; } message PackingVO{ required bool succ = 1; required string protoId = 2; optional int32 obj = 3; } message ParamVo{ optional string m = 1; }
②,將proto文件生成二進制文件
1,打開命令提示提示符 , 轉到tools文件夾(如上).
2,使用命令 : protoc --descriptor_set_out=protocol_pb.protobin --include_imports protocol_pb.proto
能夠看到tools文件夾中多了一個 : protocol_pb.protobin文件 , 以下:
3,使用命令:protogen protocol_pb.protobin 將protocol_pb.protobin文件翻譯成C#文件 : ProtocolPb.cs , 以下:
能夠看出c#文件將中間的_去掉了.這個確實是我始料未及的.ide
①,將Google.ProtocolBuffers.dll 和 Google.ProtocolBuffers.Serialization.dll 引入到項目,以下
②,將 ProtocolPb.cs文件加入此項目
③,測試(正在使用)工具
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using PB; namespace ProtoBufDemo { class Program { static void Main(string[] args) { R_LoginVo.Builder loginBuild = R_LoginVo.CreateBuilder(); loginBuild.SetName("Aonaufly").SetPwd("123456").SetSign("123456789"); Console.WriteLine(@"name : {0} , pwd : {1} , sign : {2}" , loginBuild.Name , loginBuild.Pwd , loginBuild.Sign); byte[] bytes; R_LoginVo login = loginBuild.Build(); using (MemoryStream stream = new MemoryStream()) { //Save the person to a stream login.WriteTo(stream); bytes = stream.ToArray(); } R_LoginVo copy_analysis = R_LoginVo.CreateBuilder().MergeFrom(bytes).Build(); Console.WriteLine(@"name : {0} , pwd : {1} , sign : {2}", copy_analysis.Name, copy_analysis.Pwd, copy_analysis.Sign); bytes = R_LoginVo.CreateBuilder().MergeFrom(bytes).Build().ToByteArray(); Console.ReadKey(); } } }
結果以下:
能夠看出 , Google的ProtoBuf在通信方面確實有很大的優點 :
1,操做簡單
2,代碼明晰
不再須要構建複雜的Bytes結構了.測試