一、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 ; }
注意:此處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;
---------------------
作者:0colonel0
來源:CSDN
原文:https://blog.csdn.net/sinat_34322082/article/details/53063925
版權聲明:本文為部落客原創文章,轉載請附上博文連結!