在Unity中利用ProtoBuf序列化和反序列化

这里生成的cs文件和工具箱中的protobuf-net.dll文件一起导入到Unity中,新建一个测试脚本开始序列化和反序列化测试。

using UnityEngine;
using item;
using System.IO;
using ProtoBuf;

public class Test : MonoBehaviour {
	void Start () {
        Item i = new Item();
        i.Type = 1;i.num = 10;i.SubType = 2;
        ItemList list = new ItemList();
        list.item.Add(i);

        byte[] data = Serialize(list);
        Debug.LogError(data.Length);//8

        ItemList ll = Deserialize<ItemList>(data);
        Debug.LogError(ll.item[0].num);//10

    }

    byte[] Serialize(object o)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            Serializer.Serialize(ms, o);
            byte[] result = new byte[ms.Length];
            ms.Read(result, 0, result.Length);

            return result;
        }
    }

    T Deserialize<T>(byte[] data)
    {
        using (MemoryStream ms = new MemoryStream(data))
        {
            T t = Serializer.Deserialize<T>(ms);
            return t;
        }
    }
}
C#


这里使用的Serializer是ProtoBuff命名空间里面的,主要使用它序列化数据在前面加上协议头(就是命令),然后传输过去给服务端,服务端根据协议头找到对应的结构(同一个.proto生成),反序列化(去除)数据

同样的,客户端也是根据服务端的协议头,找到对应的结构,在通过统一接口ProtoBuf反序列化取出数据。


首页 我的博客
粤ICP备17103704号