美文网首页unityUnity3D 成神之路
使用ProtoBuf-net进行数据的序列化和反序列化

使用ProtoBuf-net进行数据的序列化和反序列化

作者: _凉笙 | 来源:发表于2017-11-09 18:55 被阅读1319次

    protobuf是google的一个开源项目,可用于以下两种用途:
    (1)数据的存储(序列化和反序列化),类似于xml、json等;
    (2)制作网络通信协议。

    protobuf比XML、比JSON更为强悍,语言无关、平台无关、更小的存储、更少的歧义、更高的性能

    源码下载网站https://github.com/mgravell/protobuf-net
    打包好的dll文件下载:https://code.google.com/archive/p/protobuf-net/downloads

    image.png

    我这里直接下载打包好的,直接把里面的dll导入到Unity3D里面操作就行。首先下载好后,直接在protobuf-net r668\Full\unity里面可以找到protobuf-net.dll,直接导入到unity 里面的Plugins文件里面就可以使用了。
    在这里我以序列化和反序列化一段简单的信息为例。
    首先我先创建一个脚本User

    using ProtoBuf;
    
    [ProtoContract]//表示这个类要作为ProtoBuf数据格式来进行传输
    public class User  {
    
        [ProtoMember(1)]//标识 
        public int ID { get; set; }
        [ProtoMember(2)]//标识 
        public string Username { get; set; }
        [ProtoMember(3)]//标识 
        public string Password { get; set; }
        [ProtoMember(4)]//标识 
        public int Level { get; set; }
        [ProtoMember(5)]//标识 
        public UserType _UserType { get; set; }
    
        //角色类型
        public enum UserType
        {
            Master,
            Warrior
        }   
    }
    

    然后创建脚本TestProtobuf去序列化User里面的信息并将生成一个bin文件.我在这里直接把文件保存到本地。

    using UnityEngine;
    using System.IO;
    using ProtoBuf;
    
    public class TestProtobuf : MonoBehaviour {
    
        void Start () {
              serialization();
        }
        
        //序列化User里面的信息内容
        void serialization()
        {
            User user = new User();
            user.ID = 100;
            user.Username = "Lin";
            user.Password = "123";
            user.Level = 100;
            user._UserType = User.UserType.Master;
    
            using (var fs = File.Create(Application.dataPath + "/user.bin"))//文件输出流
            {
                Serializer.Serialize<User>(fs, user);//把user对象序列化出二进制文件放入fs文件里面
            }
        }
    }
    

    把脚本TestProtobuf挂载在摄像机上,然后运行,就可以看到我们的User信息被序列化成了bin文件保存到了本地里面


    image.png

    下面我们就开始反序列化进行解析这个bin文件,并将里面的数据输出来。还是在脚本TestProtobuf里面写入代码,代码如下

    using UnityEngine;
    using System.IO;
    using ProtoBuf;
    
    public class TestProtobuf : MonoBehaviour {
    
        void Start () {
            Notserialization();
            //serialization();
        }
        
        //序列化User里面的信息内容
        void serialization()
        {
            User user = new User();
            user.ID = 100;
            user.Username = "Lin";
            user.Password = "123";
            user.Level = 100;
            user._UserType = User.UserType.Master;
    
            using (var fs = File.Create(Application.dataPath + "/user.bin"))//文件输出流
            {
                Serializer.Serialize<User>(fs, user);//把user对象序列化出二进制文件放入fs文件里面
            }
        }
        void Notserialization()
        {
            User user = null;
            using (var fs = File.OpenRead(Application.dataPath + "/user.bin"))
            {
                user=Serializer.Deserialize<User>(fs);//反序列化
            }
            print("id:"+user.ID+",用户名:"+user.Username+",密码:"+user.Password+",等级:"+user.Level+",角色类型:"+user._UserType);
        }   
    }
    

    运行后就可看到输出结果,就是user.bin文件反序列化出来的角色信息


    image.png

    这样我们利用ProtoBuf-net进行序列号与反序列化的过程就完成了。

    更多资料学习:
    https://www.cnblogs.com/wu-jian/archive/2011/02/22/1961104.html

    http://blog.csdn.net/kun1234567/article/details/49758675

    相关文章

      网友评论

      本文标题:使用ProtoBuf-net进行数据的序列化和反序列化

      本文链接:https://www.haomeiwen.com/subject/midmmxtx.html