转载:http://www.jianshu.com/p/f2e8846a296d
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
.
我这里直接下载打包好的,直接把里面的dll导入到Unity3D里面操作就行。首先下载好后,直接在protobuf-net r668\Full\unity里面可以找到protobuf-net.dll,直接导入到unity 里面的Plugins文件里面就可以使用了。
在这里我以序列化和反序列化一段简单的信息为例。
首先我先创建一个脚本User
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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文件.我在这里直接把文件保存到本地。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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文件保存到了本地里面
下面我们就开始反序列化进行解析这个bin文件,并将里面的数据输出来。还是在脚本TestProtobuf里面写入代码,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
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文件反序列化出来的角色信息
这样我们利用ProtoBuf-net进行序列号与反序列化的过程就完成了。
更多资料学习:
https://www.cnblogs.com/wu-jian/archive/2011/02/22/1961104.html
- 本文固定链接: http://www.u3d8.com/?p=1500
- 转载请注明: 网虫虫 在 u3d8.com 发表过