当前位置: 首页 > 面试题库 >

在一个协议缓冲区二进制文件中存储多个消息

裴心水
2023-03-14
问题内容

我有重复的消息,我想存储在一个文件中。目前,我必须将此重复消息包装在另一条消息中。有没有解决的办法?

package foo;

message Box {
  required int32 tl_x = 1;
  required int32 tl_y = 2;
  required int32 w = 3;
  required int32 h = 4;
}

message Boxes {
  repeated Box boxes = 1;
}

问题答案:

这是协议缓冲区文档的“技术”部分对重复消息的说明:

如果要将多个消息写入单个文件或流,则由您来跟踪一条消息的结尾和下一条消息的开始。协议缓冲区连线格式不是自定界的,因此协议缓冲区解析器无法确定消息在何处结束。解决此问题的最简单方法是在编写消息本身之前先编写每个消息的大小。当您读回消息时,您将读取大小,然后将字节读取到一个单独的缓冲区中,然后从该缓冲区进行解析。(如果要避免将字节复制到单独的缓冲区,请签出CodedInputStream类(在C
++和Java中),可以告知该类将读取限制为一定数量的字节。)



 类似资料:
  • 我有一个二进制数据缓冲区,我想存储在协议缓冲区中。 在留档(https://developers.google.com/protocol-buffers/docs/proto#scalar)中,它说类型等价于C中的。我无法相信这一点,所以我不得不尝试它,是的,这似乎是这样... 本协议: 给出一个包含以下内容的消息定义: 公共setter/getter API如下所示: 当然,这不是在消息中存储二

  • 我想知道关于源存储库(例如git),协议缓冲区的最佳实践是什么: 我是否必须只放置。是否允许使用源代码的任何人使用protoc编译器重新生成类代码?或者两者兼而有之是最好的做法。proto编译器生成的proto文件和源代码?

  • 我是协议缓冲区的新手,我想知道是否可以搜索协议缓冲区二进制文件并以结构化格式读取数据。例如,如果我的.proto文件中的一条消息有4个字段,我希望序列化该消息,并将多条消息写入一个文件,然后在该文件中搜索特定的字段。如果我找到该字段,我希望以与写入时相同的结构化格式读回消息。对于协议缓冲区,这是可能的吗?如果可能,任何示例代码或示例都将非常有用。谢谢

  • 根据示例代码https://developers.google.com/protocol-buffers/docs/cpptutorial,它们展示了如何解析二进制格式的原始文件。使用 我尝试删除文本格式的输入文件的,但在读取文件时仍然失败。我需要做什么才能读取文本格式的原始文件?

  • 试图使用Ionic 4中的协议缓冲区进行编码 我已经下载了协议并用它来生成一堆_pb.js文件,每个. proto文件一个。很好。 首先关注原型示例。这是示例代码: 我做了一些更改以匹配我的文件。更改proto文件的名称。但是我的proto文件中没有包名称。所以我只是使用了消息名称。首先这是我的. proto文件的开头: 下面是我修改后的代码: 这似乎不起作用。我的控制台显示: 我相信我已经成功地

  • 我目前在我的protoc.exe.旁边有一个名为addressbook.proto的文件,我在生成. h和. cc文件时遇到了困难 然而,我得到以下回应 关于我可能做错了什么有什么建议吗?