Protobuf3不会序列化默认值

80 篇文章 5 订阅
问题
  • 今天遇到一个很奇怪的问题
  • 我需要向服务器发送血量记录状态
  • 角色血量为0时,服务器接收的还是25【上一次接收的血量状态】
原因
  • 这里面有两个原因
  • protobuf不会序列化默认值,float类型默认值是0
  • 我用一个单一消息实例来接收信息,当接收到一个HP没有的消息时,自然还是上一次的数据
  • 解决办法就是不要用默认值,比如用-1来确定状态或者单一实例用完后重置数据
  • 参考
  • 参考
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
protobuf序列指的是用protobuf库将数据结构(如类、结构体、数组、列表等)转换成字节数组的过程。protobuf是一种轻量级的序列框架,用于数据交换和存储领域。它具有协议缓冲区(Protocol Buffers)的特性,可实现高效的数据序列和反序列,支持多种编程语言(如C++、Java、Python等),有着简单、高效、扩展性强的优点,广泛应用于分布式系统、网络通信、数据存储、机器学习等领域。 protobuf序列的过程包括定义数据结构、编写.proto文件、生成对应编程语言的代码、序列和反序列。定义数据结构时,需按protobuf规范定义字段类型和名称,如int、double、string、bool等,还可以定义嵌套类型、枚举类型等。编写.proto文件时,需遵循protobuf规范,指定消息类型、字段名称和编号、数据类型、默认等信息,可以使用注释、枚举类型、嵌套类型等。生成代码时,需先安装protobuf库,然后用protoc命令编译.proto文件,生成对应编程语言的代码文件,如C++的.pb.h和.pb.cc文件、Java的.proto文件和.java文件等。序列时,需先创建消息对象、设置字段、调用SerializeToArray函数将消息对象序列成字节数组。反序列时,需先创建消息对象、调用ParseFromArray函数将字节数组反序列成消息对象、获取字段protobuf序列具有以下优点:1)高效:protobuf序列后的字节数组较小,序列和反序列效率高,占用的内存较少,可减少网络传输和存储开销;2)扩展性强:protobuf支持版本控制和兼容性,修改数据结构时不需要重写代码,只需修改.proto文件并重新编译即可;3)跨平台性好:protobuf支持多种编程语言,可在不同平台上使用同一套数据结构和代码;4)易维护:protobuf代码结构清晰,可读性好,易于维护和修改。 总之,protobuf序列是一种高效、可扩展、跨平台、易维护的数据序列方式,可广泛应用于各种领域的数据交换和存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值