unity3d中ProtoBuf的序列化和反序列化c#
2015-10-28 20:35
716 查看
using System; using System.IO; using ProtoBuf; namespace SensorServerPro { class Common { /// <summary> /// 传递过来的类型序列化成byte[] /// </summary> /// <typeparam name="T">传递的类型</typeparam> /// <param name="instance">类型对象</param> /// <returns>返回instance转换成的byte[]</returns> public static byte[] Serialize<T>(T instance) { byte[] bytes = null; using (var ms = new MemoryStream()) { Serializer.Serialize<T>(ms, instance); //ms流对象,instance转换成byte数组会存储在ms里面。《序列化》 bytes = new byte[ms.Position]; //为bytes实例化一个长度(传递过来的类型转换成(byte)数组之后的长度)ms.position(ms流对象的长度) var fullBytes = ms.GetBuffer(); //获取储存在内存流里面的字节数据 Array.Copy(fullBytes, bytes, bytes.Length); //将保存在 fullBytes内存流里的数据拷贝到bytes里。 } return bytes; } /// <summary> /// 将传递过来的bytes[]反序列化成T类型 /// </summary> /// <typeparam name="T">反序列化成的类型</typeparam> /// <param name="bytes">byte[]</param> /// <returns>返回一个定义好的类型,内部存储要传输的数据</returns> public static T DeSerialize<T>(byte[] bytes) { using (var ms=new MemoryStream(bytes)) //(声明一个内存流对象) { return Serializer.Deserialize<T>(ms); //《反序列化》 } } } }
using ProtoBuf;
[ProtoContract] class PlayerData { [ProtoMember(1)] public float px { get; set; } [ProtoMember(2)] public float py { get; set; } [ProtoMember(3)] public float pz { get; set; } [ProtoMember(4)] public float rx { get; set; } [ProtoMember(5)] public float ry { get; set; } [ProtoMember(6)] public float rz { get; set; } }
当然,在进行系列操作的时候你还需要先导入ProtoBuf的Dll文件。文件我这里就不上传了百度的到的
相关文章推荐
- unity3d各种OpenFileDialog操作
- unity, editable mesh
- unity 5.0.1:nugi自适应手机分辨率
- Unity3D优化建议
- unity平台的预处理
- UNITY 文件路径整理(偷的)
- 作为Unity3D的脚本而言,c#中for是否真的比foreach效率更高?
- [Unity3D学习] Unity代码热更新 源码下载
- Unity3d + UGUI 的多分辨率适配
- Unity3d + UGUI 的多分辨率适配
- unity之Mathf类
- Kinect识别与Unity3D虚拟场景中精准度的问题
- Unity3D中脚本控制AudioSource组件
- Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
- 细说Unity3D(一)——移动平台动态读取外部文件全解析
- 说说Unity3D里的各种坐标系
- unity3d 面试题
- [Unity3D]Physics System - Rigidbody[未完待续]
- Unity5中优化VR 应用的12个技巧
- unity3d 手机中Input类中touch详解_教程