protocol buffer的使用

Protocol buffer的使用

protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。提供多种语言的实现接口:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

下边简单介绍如何在网络通讯中,对二进制数据进行序列化、反序列化解析的使用。

C# 中使用方法

1、在VS中通过nuget引入protocol-net,如下图:
在这里插入图片描述
2、新建测试类

[ProtoContract]
public class LoginMessage
{
    #region 属性

    [ProtoMember(1)]
    public string Key { get; set; }
    [ProtoMember(2)]
    public Int64 SendTime { get; set; }
    [ProtoMember(3)]
    public string SerialNumber { get; set; }
    [ProtoMember(4)]
    public string CtrlProtoVersion { get; set; }
    [ProtoMember(5)]
    public string CtrlVendor { get; set; }
    [ProtoMember(6)]
    public string CtrlSwVersion { get; set; }
    [ProtoMember(7)]
    public string CtrlHwType { get; set; }
    [ProtoMember(8)]
    public string DataCenter { get; set; }
    [ProtoMember(9)]
    public int CtrlStatus { get; set; }
    [ProtoMember(10)]
    public int BillCount { get; set; }
    [ProtoMember(11)]
    public string Reserved1 { get; set; }
    [ProtoMember(12)]
    public string Reserved2 { get; set; }

    #endregion
}

帮助类:

   public class ProtobufHelp
   {
    public static byte[] ObjectToBytes<T>(T instance)
    {
        try
        {
            byte[] array;
            if (instance == null)
            {
                array = new byte[0];
            }
            else
            {
                MemoryStream memoryStream = new MemoryStream();
                Serializer.Serialize(memoryStream, instance);
                array = new byte[memoryStream.Length];
                memoryStream.Position = 0L;
                memoryStream.Read(array, 0, array.Length);
                memoryStream.Dispose();
            }
            return array;
        }
        catch (Exception ex)
        {

            return new byte[0];
        }
    }

    public static T BytesToObject<T>(byte[] bytesData, int offset, int length)
    {
        if (bytesData.Length == 0)
        {
            return default(T);
        }
        try
        {
            MemoryStream memoryStream = new MemoryStream();
            memoryStream.Write(bytesData, 0, bytesData.Length);
            memoryStream.Position = 0L;
            T result = Serializer.Deserialize<T>(memoryStream);
            memoryStream.Dispose();
            return result;
        }
        catch (Exception ex)
        {
            return default(T);
        }
    }
}

3、使用

LoginMessage login = new LoginMessage();
login.Key = "123";

byte[] data = ProtobufHelp.ObjectToBytes(login );
var tempLogin = ProtobufHelp.BytesToObject(data );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值