美文网首页
ProtoBuf使用

ProtoBuf使用

作者: 钱哆哆jj | 来源:发表于2018-04-10 23:04 被阅读0次

    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;

            }

    相关文章

      网友评论

          本文标题:ProtoBuf使用

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