protobuf
绝世好阿狸
这个作者很懒,什么都没留下…
展开
-
【Protobuf(五)】Any.park
protobuf中的消息定义需要指定类型,试想一下,如果需要一种通用的类型该怎么办?protobuf中提供了Any机制,可以让我们在protobuf定义中不指定具体类型,在运行时指定类型进行解析,有点类似编程语言里的泛型思想(姑且这么说吧。。。)message TestParams1 { uint32 id = 1; string name = 2;}message TestMsg7 { google.protobuf.Any pass_through = 1;}原创 2020-11-15 22:14:44 · 700 阅读 · 0 评论 -
【Protobuf(四)】消息格式
protobuff是一种平台语言无关的消息序列化协议,相比于传统的json、xml,序列后的空间更小,但是无法自解释,需要结合额外的proto定义文件才能反序列化,当然这样也更安全。下面记录一下protobuff消息格式。protobuff消息序列化后是多个key-value对,每一个字段对应一个key-value对。key-value遵循如下格式:tag|type (length) datatag|type:tag指的是字段的序号,这个一旦定义就不能更改,否则无法解析。type用于标识key-原创 2020-11-15 16:08:25 · 1127 阅读 · 0 评论 -
【Protobuf(三)】Varints 与 Zigzag 编码
在计算机中,整数值通常有两种类型:32位以及64位,在Java中分别对应的是int和long,在C++中分别对应的是int32/uint32和int64/uint64。整型值按照二进制补码的形式存放。而且是定长的。也就是不论数值大小,类型一旦固定,占用的bit位数就是固定的。那么protobuff协议如何序列化一个整数值?protobuff使用Varints编码格式来编码整数,这个协议最大的特点是变长编码。怎么理解?也就是一个整数值编码后的字节数是不确定的,数值越小,占用的字节数也越少,比如127以原创 2020-11-14 21:44:27 · 1191 阅读 · 0 评论 -
【Protobuf(二)】protobuf3 默认值
/** * 关于protobuff3 默认值问题 * 首先,pb对象的get方法永远不会有null,如果没有设置,会生成对应的默认值 * * 如果属性值是一个message,那么pb会为这个属性生成一个hasXXX方法,可以用这个方法判断是否设置了这个属性 * 对于其他属性,比如string,uint32等等,如果没有设置,get出来的将会是控制,比如string就是"",uint32就是0,此时无法区分是没有设置还是设置了默认值,需要业务自行约定...原创 2020-09-03 13:30:09 · 5457 阅读 · 3 评论 -
【Protobuf(一)】proto文件的几个参数的含义
1.package:定义message的包名。包名的含义与平台语言无关,这个package仅仅被用在proto文件中用于区分同名的message类型。可以理解为message全名的前缀,和message名合起来唯一标识一个message类型。比如com.user.User与com.company.User就是两个message类型。在proto文件中import时,如果有重名的message,...原创 2020-05-07 23:24:37 · 7505 阅读 · 0 评论