首页 > 其他分享 >关于protobuf的序列化与反序列化

关于protobuf的序列化与反序列化

时间:2024-08-24 09:04:40浏览次数:9  
标签:protobuf bytes 关于 ms new byte 序列化 LoginExample

当我们要使用protobuf进行协议编写,且需要协议在网络中传输的时候,就需要将类或者xxx.proto 文件序列化
当需要将类序列化,且使用protobuf的时候,我们需要引入Google.Protobuf.Tools 3.6.1 和 protobuf-portable-net 2.0.0.668 这两个库,版本根据需要自行选择
引入类库完成后,将需要序列化的类添加注解,例如下方类
[ProtoContract] //该注解就表示该类是protobuffer 需要序列化的类
public class TestProtobuf
{
[ProtoMember(1)] // 每个属性都加上这个
public string Name { get; set; }
[ProtoMember(2)]
public int Age { get; set; }
[ProtoMember(3)]
public string Describe { get; set; }
}
下面是序列化 和 反序列化的方法
private static byte[] Serialize(object t)
{
using (MemoryStream ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, t);
byte[] bytes = new byte[ms.Length];
ms.Position = 0;
ms.Read(bytes, 0, bytes.Length);
return bytes;
}
}
private static byte[] Serialize(object t)
{
using (MemoryStream ms = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(ms, t);
byte[] bytes = new byte[ms.Length];
ms.Position = 0;
ms.Read(bytes, 0, bytes.Length);
return bytes;
}
}

当我们需要将xxx.proto生成的xxx.cs文件序列化的时候
//这是我们xxx.proto 生成LoginExample 生成的类
Test.LoginExample loginExample = new Test.LoginExample();
loginExample.Loginid = 1;
loginExample.Loginname = "Success";
loginExample.LoginInfo = "This is Test Example Please Say 6 6 6";
//直接进行序列化
byte[] bytes = loginExample.ToByteArray();
//直接进行反序列化
LoginExample v = LoginExample.Parser.ParseFrom(bytes);

标签:protobuf,bytes,关于,ms,new,byte,序列化,LoginExample
From: https://www.cnblogs.com/onlyjq/p/18377360

相关文章

  • C语言中关于文件处理的常用函数
    目录标准IO流文本文件与二进制文件打开文件读写文件文本文件二进制文件文件定位关闭文件注意事项标准IO流在C语言中,流(Stream)是用于描述一切输入源或输出目的地的概念。流可以是键盘输入、屏幕输出,也可以是磁盘文件。标准流包括三个预定义的流:stdin:标准输入流,默......
  • 关于对 Tomcat 进行小版本升级的快速解决方案
    1、背景描述原来的Tomcat在部署时,使用的是最新的版本9.0.40。经过一段时间后,在原来的Tomcat版本中,发现存在漏洞。因此,需要将旧版本(9.0.40)升级到没有漏洞的新版本(9.0.93)。2、查看Tomcat的版本信息如上图所示,在tomcat的bin目录下打开cmd窗口,运行version.bat程序......
  • 应用程自定义协议与序列化反序列化
        本篇将主要介绍在应用层中自定义的协议,自定义协议的同时还需要将我们的数据继续序列化和反序列化,所以本篇的重点为序列化、反序列化的原因以及如何自定义协议,接着探讨了关于为什么tcp协议可以支持全双工协议。还根据用户自定义协议结合tcpsocket编写了一份三......
  • 关于Arrays.asList返回的List无法新增和删除?
    这个是在写项目的时候发现的,然后就分析了一下源码,得其内部原理复现代码示例:publicclassArraysAsList{publicstaticvoidmain(String[]args){Integer[]array={1,2,3,4,5};List<Integer>list=Arrays.asList(array);list.forEach......
  • 关于图
    图图:记为:G=(V,E)其中:\(V\)是顶点集合,是有穷非空集,\(E\)是边集合,是有穷集。问:当E(G)为空时,图\(G\)存在否?答:存在!但此时图\(G\)只有顶点,没有边。无向图:每条边是无方向的。有向图:每条边是有方向的。完全图:任意两条边有一条边相连接。若\(n\)个接点的无向图有$n(n......
  • 关于Protobuf在使用中的一些注意点
    Protobuf是谷歌旗下的一款二进制序列化协议协议的编写在项目中新建一个xxx.proto文件文件的格式第一行写protobuf的版本syntax="proto3";第二行写包的名字在C#中就说命名空间的名字,避免重复例如packageTest;接下来写协议内容例如以下示例关于protobuf的具体语法......
  • Android 关于设备定屏/黑屏/冻屏/ANR那些事
    定屏/黑屏常见问题我的理解是冻屏和定屏是一个意思.冻屏:目的就是防止执行默写操作的过程出现黑屏,冻屏的过程只是不接收输入和不执行动画,并且会截取屏幕进行显示.A:系统问题(底层/framework层)A_1:system_server_watchdog:现象多为卡顿/黑屏A_2:WMS(WindowManagerService)......
  • 关于在得帆云数据中台如何自定义函数
    UDF使用示例场景说明:使用udf编写一个函数Unit_Conversion(value)。在函数中根据value的值进行单位转化,并进行类型转化。1、导入依赖在pom.xml中将如下依赖进行导入。<dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec<......
  • 一些关于生成函数的推导
    该文只推导一些特殊序列的生成函数1.$\quad$对于序列{\(a_n\)},\(a_n=1^n\),其生成函数为\(g(x)=\sum_{n=0}^{\infty}{a_nx^n}\)。$\quad$现在推导其封闭形式,先将其乘一个\(x\),可以得到:\[x\cdotg(x)=\sum_{n=0}^{\infty}{a_nx^{n+1}}\]$\quad$两式相减可得......
  • 关于Quick.logger的一点点补充
    关于Quick.logger的一点点补充用Quick.logger一直有个需求需要用到对多种Provider更新时,自动更新TMemo之类TStrings相关的显示见面。一直想用Quick.Logger.Provider.StringList,然后指定页面里面的TMemo.lines来实现。但可以现象的是一定会因为同步问题导致失败。好在Quic......