问题标签 [protocol-buffers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
21880 浏览

c++ - 如何使用协议缓冲区?

有人可以帮忙告诉我如何使用协议缓冲区。实际上,我想通过套接字在运行在 unix 上的程序和在 windows 上运行的另一个程序之间交换数据,以便运行模拟研究。

使用套接字交换数据的程序是用 C/C++ 编写的,如果 somne​​one 可以帮助我使用协议缓冲区来交换以下形式的数据,我会很高兴:

我尝试了几种方法,但仍然无法正确交换数据。任何帮助将不胜感激

谢谢你的帮助,

0 投票
1 回答
3405 浏览

c# - 使用 Protobuf-net 序列化对象列表

我一直在寻找对文件进行一些二进制序列化,而 protobuf-net 似乎是一个性能良好的替代方案。不过,我有点卡在入门上。由于我想将类的定义与实际的序列化分离,因此我没有使用属性,而是选择使用 .proto 文件,因此我已经将对象的结构降低了(我认为)

(日期时间有效还是应该使用刻度作为 int64?)

但我一直坚持如何使用 protogen,然后将 IEnumerable 的 Post 序列化到文件中并将其读回。任何帮助,将不胜感激

另一个相关问题,是否有检测损坏的二进制文件的最佳实践,例如在序列化时计算机是否关闭

0 投票
3 回答
7232 浏览

protocol-buffers - 我应该使用二进制文件还是文本文件来存储 protobuf 消息?

使用 Google protobuf,我将我的序列化消息数据保存到一个文件中 - 每个文件中都有几条消息。我们有 C++ 和 Python 版本的代码,所以我需要使用两种语言都可用的 protobuf 函数。我已经尝试过使用 SerializeToArray 和 SerializeAsString 并且似乎有以下不幸的情况:

  1. SerializeToArray:正如在一个答案中所建议的,使用它的最佳方法是在每条消息前面加上它的数据大小。这对 C++ 很有用,但在 Python 中,这看起来不太可能——我错了吗?

  2. SerializeAsString:这会生成一个与其二进制对应的序列化字符串 - 我可以将其保存到文件中,但是如果序列化结果中的字符之一是 \n 会发生什么 - 我们如何找到行尾或消息的结尾那事?

更新:

请允许我稍微改写一下。据我了解,我无法用 C++ 编写二进制数据,因为我们的 Python 应用程序无法读取数据,因为它只能解析字符串序列化消息。然后我应该SerializeAsString同时在 C++ 和 Python 中使用吗?如果是,那么将此类数据存储在文本文件而不是二进制文件中是最佳做法吗?我的直觉是二元的,但正如你所见,这看起来不像是一个选择。

0 投票
4 回答
19204 浏览

python - 使用 Python,我如何获得我的 Google protobuf 消息的二进制序列化?

我在protobuf Python 文档中看到了函数 SerializeAsString ,但是就像这表明的那样,这给了我二进制数据的字符串版本。有没有一种方法可以使用 Python 序列化和解析 protobuf 数据的二进制数组?

我们有一个 C++ 应用程序,它将 protobuf 消息作为二进制数据存储在一个文件中。我们想使用 Python 读取和写入文件。

0 投票
2 回答
10005 浏览

c++ - 如何使用 Python protobuf 读取二进制 C++ protobuf 数据?

Google protobuf 的 Python 版本只给了我们:

C++ 版本给了我们两个:

我们正在以二进制格式写入我们的 C++ 文件,我们希望保持这种方式。也就是说,有没有办法将二进制数据读入 Python 并将其解析为字符串?

这是正确的做法吗?

更新:

这是一个新的例子,一个问题:

当我们到达foo_bar.ParseFromString(data)线路时,我收到此错误:

更新 2:

事实证明,二进制数据上的填充正在抛出 protobuf;正如消息所暗示的那样,发送了太多字节(在这种情况下,它指的是填充)。

此填充来自SerializeToArray在固定长度缓冲区上使用 C++ protobuf 函数。为了消除这种情况,我使用了这个临时代码:

我认为这里有一个设计缺陷。我将重新实现我的 C++ 代码,以便将可变长度数组写入二进制文件。正如 protobuf 文档所建议的那样,我将在每条消息前面加上它的二进制大小,以便我知道在使用 Python 打开文件时要读取多少内容。

0 投票
2 回答
2653 浏览

c++ - 如何使用 Google 的 protobuf 编写这些类?

我刚刚遇到了 Google 的协议缓冲区。这似乎是我正在编写的 C++ 后端应用程序的解决方案。问题是我似乎找不到任何有关矢量类型的信息。文档提到了repeat_types,但我似乎找不到任何东西。

假设我有这些类:

我如何为这些类编写 .proto 文件,因为我使用了很多向量成员。在将这些类“移植”到我可以使用的 .proto 文件中的任何帮助将不胜感激。

0 投票
1 回答
1601 浏览

java - 协议缓冲区中 getSerializedSize() 的性能损失

getSerializedSize()在使用 序列化消息之前调用 GPB 消息是否会降低性能writeTo(OutputStream)

在将消息写入输出流之前,我需要能够知道消息的大小。

我在 Java 上使用 GPB。

0 投票
1 回答
1022 浏览

c# - protobuf-net 与 C++ 通信

我正在寻找实现各种消息格式的 protobuf-net,我特别喜欢基于合同的方法,因为我不必弄乱 proto 编译器。我无法找到相关信息的一件事是,这是否会使跨平台工作变得困难?有一些 C++ 应用程序需要能够解析 PB 数据,虽然我知道 protobuf-net 序列化为 PB 标准格式,但如果我使用合同方法而不是 proto 文件,C++ 端如何解析数据?

可以(应该吗?)我为 C++ 需要理解数据的(极少数)情况编写一个单独的原型文件?如果是这样,我怎么知道从 proto 文件生成的 C++ 类将匹配来自 no-proto-file C# 端的数据?

0 投票
1 回答
1407 浏览

java - 如何在没有定义的情况下获取 Google Protobuf 消息的结构

我必须在没有消息定义的情况下将 protobuf 消息的消息结构传输给我。使用 UnknownFieldSet 方法,我能够获得消息的字符串表示形式,如下所示:

字段 2 代表什么数据结构?使用 UnknownFieldSet.Field.getGroupList 我能够获取字段 3 和 4 的内容,这是否意味着字段 2 具有“已弃用”的组结构?

0 投票
4 回答
57974 浏览

c# - 协议缓冲区与 JSON 或 BSON

有没有人有任何关于 Protocol Buffers 与 BSON(二进制 JSON)或一般 JSON 的性能特征的信息?

  • 线径
  • 序列化速度
  • 反序列化速度

这些看起来像是在 HTTP 上使用的很好的二进制协议。我只是想知道从长远来看,对于 C# 环境来说哪个更好。

这是我在BSONProtocol Buffers上阅读的一些信息。