using UnityEngine; using System; using ProtoBuf; using System.IO; using System.Collections;
//添加特性,,表示可以被ProtoBuf工具序列化 [ProtoContract] public class NetModel { //添加特性,表示該字段可以被序列化,,1可以理解為下標 [ProtoMember(1)] public int ID; [ProtoMember(2)] public string Commit; [ProtoMember(3)] public string Message; }
public class ProtocolBuffer //: MonoBehaviour {
// Use this for initialization public void Start() { Test(); }
void Test() { //創(chuàng)建對象 NetModel item = new NetModel() { ID = 1, Commit = "LanOu", Message = "Unity" }; //序列化對象 byte[] temp = Serialize(item); //ProtoBuf的優(yōu)勢一:小 //反序列化為對象 NetModel result = DeSerialize(temp); }
// 將消息序列化為二進制的方法 // < param name="model">要序列化的對象< /param> private byte[] Serialize(NetModel model) { try { //涉及格式轉(zhuǎn)換,,需要用到流,將二進制序列化到流中 using (MemoryStream ms = new MemoryStream()) { //使用ProtoBuf工具的序列化方法 ProtoBuf.Serializer.Serialize<NetModel>(ms, model); //定義二級制數(shù)組,,保存序列化后的結(jié)果 byte[] result = new byte[ms.Length]; //將流的位置設(shè)為0,,起始點 ms.Position = 0; //將流中的內(nèi)容讀取到二進制數(shù)組中 ms.Read(result, 0, result.Length); return result; } } catch (Exception ex) { return null; } }
// 將收到的消息反序列化成對象 // < returns>The serialize.< /returns> // < param name="msg">收到的消息.</param> private NetModel DeSerialize(byte[] msg) { try { using (MemoryStream ms = new MemoryStream()) { //將消息寫入流中 ms.Write(msg, 0, msg.Length); //將流的位置歸0 ms.Position = 0; //使用工具反序列化對象 NetModel result = ProtoBuf.Serializer.Deserialize<NetModel>(ms); return result; } } catch (Exception ex) { return null; } } }
|