问题标签 [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.
c++ - 如何使用协议缓冲区?
有人可以帮忙告诉我如何使用协议缓冲区。实际上,我想通过套接字在运行在 unix 上的程序和在 windows 上运行的另一个程序之间交换数据,以便运行模拟研究。
使用套接字交换数据的程序是用 C/C++ 编写的,如果 somneone 可以帮助我使用协议缓冲区来交换以下形式的数据,我会很高兴:
我尝试了几种方法,但仍然无法正确交换数据。任何帮助将不胜感激
谢谢你的帮助,
c# - 使用 Protobuf-net 序列化对象列表
我一直在寻找对文件进行一些二进制序列化,而 protobuf-net 似乎是一个性能良好的替代方案。不过,我有点卡在入门上。由于我想将类的定义与实际的序列化分离,因此我没有使用属性,而是选择使用 .proto 文件,因此我已经将对象的结构降低了(我认为)
(日期时间有效还是应该使用刻度作为 int64?)
但我一直坚持如何使用 protogen,然后将 IEnumerable 的 Post 序列化到文件中并将其读回。任何帮助,将不胜感激
另一个相关问题,是否有检测损坏的二进制文件的最佳实践,例如在序列化时计算机是否关闭
protocol-buffers - 我应该使用二进制文件还是文本文件来存储 protobuf 消息?
使用 Google protobuf,我将我的序列化消息数据保存到一个文件中 - 每个文件中都有几条消息。我们有 C++ 和 Python 版本的代码,所以我需要使用两种语言都可用的 protobuf 函数。我已经尝试过使用 SerializeToArray 和 SerializeAsString 并且似乎有以下不幸的情况:
SerializeToArray:正如在一个答案中所建议的,使用它的最佳方法是在每条消息前面加上它的数据大小。这对 C++ 很有用,但在 Python 中,这看起来不太可能——我错了吗?
SerializeAsString:这会生成一个与其二进制对应的序列化字符串 - 我可以将其保存到文件中,但是如果序列化结果中的字符之一是 \n 会发生什么 - 我们如何找到行尾或消息的结尾那事?
更新:
请允许我稍微改写一下。据我了解,我无法用 C++ 编写二进制数据,因为我们的 Python 应用程序无法读取数据,因为它只能解析字符串序列化消息。然后我应该SerializeAsString
同时在 C++ 和 Python 中使用吗?如果是,那么将此类数据存储在文本文件而不是二进制文件中是最佳做法吗?我的直觉是二元的,但正如你所见,这看起来不像是一个选择。
python - 使用 Python,我如何获得我的 Google protobuf 消息的二进制序列化?
我在protobuf Python 文档中看到了函数 SerializeAsString ,但是就像这表明的那样,这给了我二进制数据的字符串版本。有没有一种方法可以使用 Python 序列化和解析 protobuf 数据的二进制数组?
我们有一个 C++ 应用程序,它将 protobuf 消息作为二进制数据存储在一个文件中。我们想使用 Python 读取和写入文件。
c++ - 如何使用 Python protobuf 读取二进制 C++ protobuf 数据?
Google protobuf 的 Python 版本只给了我们:
C++ 版本给了我们两个:
我们正在以二进制格式写入我们的 C++ 文件,我们希望保持这种方式。也就是说,有没有办法将二进制数据读入 Python 并将其解析为字符串?
这是正确的做法吗?
更新:
这是一个新的例子,一个问题:
当我们到达foo_bar.ParseFromString(data)
线路时,我收到此错误:
更新 2:
事实证明,二进制数据上的填充正在抛出 protobuf;正如消息所暗示的那样,发送了太多字节(在这种情况下,它指的是填充)。
此填充来自SerializeToArray
在固定长度缓冲区上使用 C++ protobuf 函数。为了消除这种情况,我使用了这个临时代码:
我认为这里有一个设计缺陷。我将重新实现我的 C++ 代码,以便将可变长度数组写入二进制文件。正如 protobuf 文档所建议的那样,我将在每条消息前面加上它的二进制大小,以便我知道在使用 Python 打开文件时要读取多少内容。
c++ - 如何使用 Google 的 protobuf 编写这些类?
我刚刚遇到了 Google 的协议缓冲区。这似乎是我正在编写的 C++ 后端应用程序的解决方案。问题是我似乎找不到任何有关矢量类型的信息。文档提到了repeat_types,但我似乎找不到任何东西。
假设我有这些类:
我如何为这些类编写 .proto 文件,因为我使用了很多向量成员。在将这些类“移植”到我可以使用的 .proto 文件中的任何帮助将不胜感激。
java - 协议缓冲区中 getSerializedSize() 的性能损失
getSerializedSize()
在使用 序列化消息之前调用 GPB 消息是否会降低性能writeTo(OutputStream)
?
在将消息写入输出流之前,我需要能够知道消息的大小。
我在 Java 上使用 GPB。
c# - protobuf-net 与 C++ 通信
我正在寻找实现各种消息格式的 protobuf-net,我特别喜欢基于合同的方法,因为我不必弄乱 proto 编译器。我无法找到相关信息的一件事是,这是否会使跨平台工作变得困难?有一些 C++ 应用程序需要能够解析 PB 数据,虽然我知道 protobuf-net 序列化为 PB 标准格式,但如果我使用合同方法而不是 proto 文件,C++ 端如何解析数据?
可以(应该吗?)我为 C++ 需要理解数据的(极少数)情况编写一个单独的原型文件?如果是这样,我怎么知道从 proto 文件生成的 C++ 类将匹配来自 no-proto-file C# 端的数据?
java - 如何在没有定义的情况下获取 Google Protobuf 消息的结构
我必须在没有消息定义的情况下将 protobuf 消息的消息结构传输给我。使用 UnknownFieldSet 方法,我能够获得消息的字符串表示形式,如下所示:
字段 2 代表什么数据结构?使用 UnknownFieldSet.Field.getGroupList 我能够获取字段 3 和 4 的内容,这是否意味着字段 2 具有“已弃用”的组结构?
c# - 协议缓冲区与 JSON 或 BSON
有没有人有任何关于 Protocol Buffers 与 BSON(二进制 JSON)或一般 JSON 的性能特征的信息?
- 线径
- 序列化速度
- 反序列化速度
这些看起来像是在 HTTP 上使用的很好的二进制协议。我只是想知道从长远来看,对于 C# 环境来说哪个更好。
这是我在BSON和Protocol Buffers上阅读的一些信息。