ProtoBuf使用

2018-04-10  本文已影响0人  钱哆哆jj

ProtoBuf也是一种序列化的方法

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式可以直接在官网下载Dll文件

导入到工程中就可以用了

ProTobuf这个命名空间是常用的

在需要序列花的类签名上面加上[ProtoContract]

在类的字段签名上加[ProtoMeber(i)]每个都加括号的数字增加

需要序列化的类

//需要被序列化的类都要加上这个可序列化特性

    [ProtoContract]

    class ProtoBuf {

        //成员也要加这个

        [ProtoMember(1)]

        public int MyProperty { get; set; }

        [ProtoMember(2)]

        public int Age { get; set; }

    }

//序列化对象



static byte[] GetVs(object value) {

            byte[] buffer = null;

            //创建内存流

            using (MemoryStream ms=new MemoryStream()) {

                if (value != null) {

                    //序列化对象

                    RuntimeTypeModel.Default.Serialize(ms, value);

                    //重置当前流的位置

                    ms.Position = 0;

                    //从流中读取字节写到缓冲区必须把缓冲区实例化出来

                    buffer = new byte[ms.Length];

                    //从流中读取数据写到缓冲区

                    ms.Read(buffer, 0, (int)ms.Length);

                }

            }

            return buffer;

        }

反序列化对象


//通过Protobuf的泛型反序列化 static object DProtobuffer(byte[] data) { 

 object value = null; 

//创建内存流对象并把字节数组写入流中

 using (MemoryStream ms=new MemoryStream(data)) {

 //使用protobuf的泛型方法反序列化对象参数是流返回值是object 

 value = Serializer.Deserialize(ms);

            }

            return value;

        }

上一篇下一篇

猜你喜欢

热点阅读