Unity常见的解析数据方式XML,JSON,ProtocolBuf篇(一)Protobuf
2016-12-13 14:43
459 查看
Unity常见的解析数据方式XML,JSON,ProtocolBuf篇(一)Protobuf
概述:
在项目中经常能够使用到的集中数据解析方式,就是XML,JSON,ProtocolBuf了,今天我们来一起学习下,首先按照常用性,先说说ProtocolBuf。一般作为手游项目来说,如果用在客户端和服务器端之间数据交互上面,使用Protobuf无疑是明智的选择,因为Protobuf解析数据速度快,传递速度也快,效率更高。
演示:
首先在unity工程项目中需要导入这个dll文件:
,这个dll文件我们需要去google或者github上面下载
,然后解压之后按照这个路径找到unity的,
,然后将我说的要用的dill文件导入到unity工程中就好了。当然我在这里为了大家方便,也直接提供下载好的地址:
链接:http://pan.baidu.com/s/1pKSSTIz 密码:jv88
在项目中使用Protobuf主要学会怎么去学会序列化和反序列化数据。
创建一个用户信息类脚本,一会儿我们将对这个脚本使用Protobuf进行序列化和反序列。
主要标签的不要重复。接下来我们对这个用户信息类进行序列化和反序列。
序列化:
运行之后,工程文件夹下面便多了一个我们序列化的数据出来,
,这样我们需要向服务器发送就给发送了,因为是二进制文件,所以传输速度会很快,如果我们从服务器上面接收到了按照Protobuf数据格式回传的数据呢?那时候该怎么处理呢?比如玩家登陆游戏,玩家事件管理器想服务器发包请求排行榜数据,当玩家打开排行榜数据的时候,数据ui显示,这里就涉及了解析服务器数据了,还是通过解析这个useinfo数据,来了解Protobuf在项目当中是怎么解析数据的。
反序列化数据:
那么经过测试,我们发现成功的将一个按照Protobuf数据格式序列化的二进制数据文件反序列了出来,并且打印出了其中的内容之一。
最后,上传一个最近项目中用到的Protobuf解析数据的代码片段:
//发送Protobuf数据
//解析Protobuf数据
其实就是这么用的,是不是很简单!核心就是上面上面的那个例子里面的那些功能,看着复杂只不过是因为做了更进一步的封装和扩展而已!
概述:
在项目中经常能够使用到的集中数据解析方式,就是XML,JSON,ProtocolBuf了,今天我们来一起学习下,首先按照常用性,先说说ProtocolBuf。一般作为手游项目来说,如果用在客户端和服务器端之间数据交互上面,使用Protobuf无疑是明智的选择,因为Protobuf解析数据速度快,传递速度也快,效率更高。
演示:
首先在unity工程项目中需要导入这个dll文件:
,这个dll文件我们需要去google或者github上面下载
,然后解压之后按照这个路径找到unity的,
,然后将我说的要用的dill文件导入到unity工程中就好了。当然我在这里为了大家方便,也直接提供下载好的地址:
链接:http://pan.baidu.com/s/1pKSSTIz 密码:jv88
在项目中使用Protobuf主要学会怎么去学会序列化和反序列化数据。
创建一个用户信息类脚本,一会儿我们将对这个脚本使用Protobuf进行序列化和反序列。
using UnityEngine; using System.Collections; using ProtoBuf; //注意命名空间的引用 [ProtoContract] //表示当前类的数据遵循Protobuf的数据格式进行传输 竟然要使用必须加这个特性 public class UserInfo { [ProtoMember(1)] //注意int标签的不重复 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 TypeTest UserTypeTest { get; set; } public enum TypeTest { MASTER, WARRIOR } }
主要标签的不要重复。接下来我们对这个用户信息类进行序列化和反序列。
序列化:
void Start () { UserInfo userInfo=new UserInfo(); userInfo.ID = 123; userInfo.Level = 95; userInfo.UserName = "youmujun"; userInfo.PassWord = "123456"; using (var fs=File.Create(Application.dataPath+"/userinfo.bin")) { //使用Protobuf序列化文件 Serializer.Serialize<UserInfo>(fs,userInfo); } }
运行之后,工程文件夹下面便多了一个我们序列化的数据出来,
,这样我们需要向服务器发送就给发送了,因为是二进制文件,所以传输速度会很快,如果我们从服务器上面接收到了按照Protobuf数据格式回传的数据呢?那时候该怎么处理呢?比如玩家登陆游戏,玩家事件管理器想服务器发包请求排行榜数据,当玩家打开排行榜数据的时候,数据ui显示,这里就涉及了解析服务器数据了,还是通过解析这个useinfo数据,来了解Protobuf在项目当中是怎么解析数据的。
反序列化数据:
void Start () { UserInfo userInfo = null; using (var fs=File.OpenRead(Application.dataPath+"/userinfo.bin")) { //反序列化 userInfo = Serializer.Deserialize<UserInfo>(fs); } //打印出反序列后的数据 print(userInfo.UserName); }
那么经过测试,我们发现成功的将一个按照Protobuf数据格式序列化的二进制数据文件反序列了出来,并且打印出了其中的内容之一。
最后,上传一个最近项目中用到的Protobuf解析数据的代码片段:
//发送Protobuf数据
private void RequestRankdData(PlayerEvent vardata) { PlayerEventEx<PBMessage.GM_AllRankListRequest> tempRdata = vardata as PlayerEventEx<PBMessage.GM_AllRankListRequest>; //发包 mPlayer.SendProtoBuf<PBMessage.GM_AllRankListRequest>((int)GameMessage.GM_ALLRANKLIST_REQUEST, tempRdata.GetData()); }
//解析Protobuf数据
public static T DeserializeProtoBuf<T>(NetPacket packet) where T : class, ProtoBuf.IExtensible { Byte[] buffer = packet.getBuffer(); if (buffer == null) { return null; } using (MemoryStream ms = new MemoryStream(buffer,NetPacket.PACK_HEAD_SIZE,buffer.Length-NetPacket.PACK_HEAD_SIZE)) { #if UserProCode T newbuild = ProtoBuf.Serializer.Deserialize<T> (ms); return newbuild; #else return new PBMessageSerializer().Deserialize(ms, null, typeof(T)) as T; #endif } }
其实就是这么用的,是不是很简单!核心就是上面上面的那个例子里面的那些功能,看着复杂只不过是因为做了更进一步的封装和扩展而已!
相关文章推荐
- unity常见的解析数据方式XML,JSON,ProtocolBuf篇(二)XML
- Unity常见的解析数据方式XML,JSON,ProtocolBuf篇(三)Json
- android 解析服务器数据使用json还是xml方式
- XML数据的三种解析(JSON方式 , DOM方式 , Sax方式)
- iOS- JSon和Xml解析,与服务器交互数据的解析详解与使用,各种解析方式详解
- android中常见的二种数据解析方法----XML和Json
- XML数据解析方式各有什么不同,JSON解析有哪些框架?
- unity中三种数据存储方式ScriptableObject,Json,Xml和Dictionary的序列化
- 四种常见的 POST 提交数据方式(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml)
- Android第一行代码 第九章 数据解析方式(xml,json)
- XML/JSON解析数据,以及数据存储方式
- android 解析服务器数据使用json还是xml方式
- jquery json xml关于解析两次json数据动态取值的处理方式
- iOS- JSon和Xml解析,与服务器交互数据的解析详解与使用,各种解析方式详解
- android 解析网络xml数据,发送xml数据,解析json数据
- android下各种XML数据解析方式
- simpleXML方式解析XML,并对XML数据进行增删改查
- Android解析XML(PULL方式)和JSON 工作原理和实现过程(详细代码)
- Jquery下Json数据的传递与解析(asp.net mvc与asp.net api下后台json接收方式的不同)
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML