所以,在过去的几周里,我一直在学习非常简单的网络编程和协议缓冲区。现在,我有一个 Java 客户端和一个 C# 服务器,它们使用协议缓冲区来回通信。一切正常,但要使其在客户端(Java)端工作,我必须创建具有传入消息的确切大小的字节数组,否则解析器会抛出“协议消息包含无效标签(零)"
在做了一些研究之后,我发现我为我的 DatagramPacket 创建的数组(1024 字节)有大量的尾随零(因为我从服务器传入的数据是 27 字节长),这就是为什么我现在,如前所述,必须使用传入数据的确切大小创建数组。
至于问题,有没有办法找出我的 .proto 文件中所有原型“消息”的大小?如果没有某种静态 getSize(),有没有一种方法可以仅通过“消息”中的字段类型来计算?
我现在使用的消息包含 3 个双精度,现在我正在考虑它,但我希望知道发生了什么的人给出肯定的答案,是 27,因为每个双精度 8 字节和每个“标签”1 字节“在每个消息字段上?