Protobuf 向后兼容性以及 proto3 与 proto2

2023-12-02

Protobuf 的卖点之一是向后兼容性,即开发人员可以改进格式,而老客户端仍然可以使用它。

现在有了名为 proto3 的新 Protobuf 版本,IDL 语言本身不兼容,例如options, required删除的地方是枚举的新语法,没有扩展名。

这是否意味着使用 proto3 无法生成较旧的 proto2 也能读取/理解的二进制文件?

就好像你必须继续使用proto2。如果你开始使用 proto3,你就无法与旧系统对话,或者必须重写、重新编译所有这些.protos 这首先就是兼容性问题。


是的,如果您的某些系统是基于 proto2 的,那么最好继续使用 proto2。在我看来,proto3 并没有引入很多新功能,大多数库将继续支持 proto2。

然而,有线格式大部分是兼容的。只要标签号相同,编码就保持不变。必需/可选说明符不会影响编码,它们只是在解码后执行的检查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protobuf 向后兼容性以及 proto3 与 proto2 的相关文章

  • gRPC / Protobuf 接口版本控制

    假设我们使用 gRCP Protobuf 来连接许多应用程序 这些应用程序是由他们自己的团队以自己的速度开发和发布的 随着时间的推移 同一应用程序将出现不同版本 例如 安装在用户 PC 上的桌面应用程序 它们在定义的界面上使用不同的版本 虽
  • 如何在客户端使用 Java 读取 gRPC 中的元数据

    我正在使用 Java 和 Protoc 3 0 编译器 我的 proto 文件如下所述 https github com openconfig public blob master release models rpc openconfig
  • 使用可选参数来实现向后兼容性是一个好主意吗?

    我想知道如何通过使用可选参数来提供向后兼容性 在我的程序中 我有一个带有函数的接口 该函数在整个程序以及许多单元测试中使用 对于某些新功能 必须将布尔值传递到此函数中 如果设置为 则会改变其行为false 如果你通过true 您将得到与以前
  • 如何在protobuf消息中添加int数组

    我必须编写一个 protobuf 消息 它应该有 1 个整数变量和一个整数数组 package protobuf message myProto optional uint32 message id 1 optional int updat
  • 使用 JavaScript 进行地理位置定位

    我正在编写一个脚本来获取地理位置 纬度 经度 我可以使用它来将我的谷歌地图实例居中 目前我使用两种可能的技术 其一是google loader ClientLocation目的 我还没有测试过这个 因为它为我返回 null 我想是因为我不住
  • C# .net 协议缓冲区 - protobuf-net 支持序列化对象值字典吗?

    我是协议缓冲区的新手 我正在使用 VS2010 的 protobuf net 从我在这里读到的内容协议缓冲区中的字典 https stackoverflow com questions 4194845 dictionary in proto
  • 在c# Visual Studio中编译协议缓冲区3时间戳类型?

    Visual Studio 2015 C NuGet Packages Google Protobuf v3 0 0 Google Protobuf Tools v3 0 0 消息类型Quake syntax proto3 import g
  • 使用标签强制 IE 11“用户代理字符串”

    我的网站在 IE11 中无法正常工作 我们都知道HTML标签允许开发者强制IE兼容模式 在例子中 效果很好 解决了 IE10 的可视化问题 但实际上在 IE11 上 即使Compatibility mode被设定为IE9 User agen
  • grpc找不到protobuf库

    我检查了 grpc 安装并完成了构建和安装 现在当我尝试 find package gRPC CONFIG REQUIRED I get CMake Error at CMakeLists txt 15 find package Found
  • 将 JSON 对象转换为 protobuf IStruct

    我正在使用Nodejs 的 Dialogflow API https cloud google com nodejs docs reference dialogflow 0 8 x google cloud dialogflow v2 这个
  • protoc 在哪里以及如何安装它?

    我想使用protoc生成java文件的命令 我一直按照 github README 中的说明进行操作https github com protocolbuffers protobuf https github com protocolbuf
  • 为什么不在下一个 JVM 中删除类型擦除呢?

    Java 在 Java 5 中引入了泛型类型擦除 因此它们可以在旧版本的 Java 上运行 这是兼容性的权衡 我们已经失去了这种兼容性 1 https stackoverflow com questions 22610400 a progr
  • 对 Java 协议缓冲区对象进行一些小更改

    我想在 Java 协议缓冲区对象树的深处进行一个小更改 我可以使用 getBuilder 方法来创建一个新对象 该新对象是旧对象的克隆并进行一些更改 当深入完成此操作时 代码会变得丑陋 Quux Builder quuxBuilder fo
  • 多个共享对象使用相同的原型导致错误:文件已存在于数据库中

    与protobuf3相关的错误 我有一个项目 它有一个 C 可执行核心和几个称为插件的共享对象 so dll 当核心启动时 它将使用 dlopen 加载这些插件 核心和插件使用protobuf作为通信协议 因此它们必须编译生成的 pb cc
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 使用 scalapb 在 Spark Streaming 中解码 Proto Buf 消息时出错

    这是一个 Spark Streaming 应用程序 它使用编码的 Kafka 消息Proto Buf Using scalapb图书馆 我收到以下错误 请帮忙 gt com google protobuf InvalidProtocolBu
  • [程序名称].exe已停止工作

    我有一个基于 Framework 2 0 构建的 NET 应用程序 我已经为它构建了一个安装程序 并尝试在具有 3 5 的计算机上运行它 所有相关环境均在Windows 7上 该应用程序在我的开发机器上以 VS 调试模式完美运行 该机器也具
  • Android API版本兼容性

    我希望我的应用程序能够在 Android 版本 2 1 和 2 2 上运行 在我的应用程序的一个区域中 有一个肖像式相机 生成肖像相机预览的过程在两个操作系统版本上是不同的 据我所知 具体方法如下 2 1 Camera Parameters
  • 支持的 Android 设备:0 台设备

    我们是 TourisMap 的开发商 我们不明白为什么在 Google Play 开发者控制台上上传 apk 后 我们支持 0 台设备 我们个人的想法是 Manifest 和 build gradle 都可以 我们可以生成 apk 然后我们
  • 列表推导式在 Python2 中泄漏循环变量:如何使其与 Python3 兼容

    我刚刚了解到为什么列表推导式会写入循环变量 而生成器却不会 https stackoverflow com questions 19848082 why do list comprehensions write to the loop va

随机推荐

  • 在 Bash 布尔表达式中使用变量

    有人可以解释如何执行布尔运算并将它们存储在 Bash 中的变量中吗 I tried A true B false C A D A B echo C echo D 我也尝试过不用美元 用 用 如何在bash中完成如此简单的操作 控制台的结果是
  • 如何在ViewPager中设置OnClickListener

    我是 Android 开发新手 正在学习编写和设计 Android 项目 我有问题ViewPager并且无法在此网站上或通过 Google 搜索找到答案 Problem 我无法制作一个Button执行其动作ViewPager 您可以在这里查
  • Java JTable 标头自动换行

    我正在尝试让表格上的标题自动换行 我已经成功做到了这一点 但第一个数据行正在扩展 该表的代码是 public class GenerateTable extends JTable private JCheckBox boxSelect ne
  • 符号扩展 1 位 2 的补数?

    我是一名学生 正在用 C 语言编写一个函数来对给定的位字段进行符号扩展 我正在使用 32 位 我在谷歌上查找了这个答案 但没有找到我想要的东西 我正在编写一个函数 该函数返回从 32 英寸中提取的一个或多个连续位的二进制补码表示形式 最左边
  • jQuery:用方括号发布数组怪癖

    我正在使用以下代码来发帖 var checked 2231 2432 jQuery ajax type post url statusUrl data entries checked 然而 当它实际发布时 服务器端的发布数据和开发人员工具中
  • 无法在 Eclipse 中启动 IBM MobileFirst Foundation Studio 8.0

    操作系统版本 Mac OS Sierra 10 12 3 Eclipse 版本 Neon 3 发布 4 6 3 Steps 下载最新的 Eclipse 版本 为 Java 开发人员安装了 IDE 从 Eclipse Marketplace
  • 如何从循环中的原始资源读取多个文件?

    我有很多文本文件 想将它们放入 for 循环中 我得到了一个 Extra 其中包含上次活动的资源名称 并有一个资源名称为的数组 我的原始资源中的文本文件来自 d0 d1 d2 d3 d79 我想检查名称和数组名称并将查找名称放入资源 我在
  • 如何在docker compose启动时创建表postgresql

    我知道这个问题已经被问过并且也给出了答案 但这对我不起作用 我也遵循同样的做法 我的 postgres 容器运行良好 我在容器内部检查了 docker entrypoint initdb d init sql 是否存在 我使用了以下 doc
  • 如何使用 Junit 5 测试服务提供商实现模块?

    这是我的基本模块 需要实现 myspi 包中定义的接口 各种提供商都可以提供 MyProvider 实现 基础模块通过 myspi MyProvider 接口实现使用它们 module base exports myspi uses mys
  • 无法在 xcode 中创建单视图 ios 应用程序

    I am new to ios xcode and I was trying to follow through the new SwiftUI tutorial The first one has you create a ios sin
  • KornShell 对整数数组进行排序

    KornShell ksh 脚本中有用于对整数数组进行排序的命令吗 在这种具体情况下 我对简单性而不是效率感兴趣 例如 如果变量 UNSORTED ARR 包含值 100911 111228 090822 并且我想将结果存储在 SORTED
  • assemble、a​​ssembleDebug 和 assembleRelease 之间的区别

    我在尝试学习bitrise平台 截至目前 我也不知道这个平台到底有什么用途 无论如何 当我进行设置时 它要求选择gradle task to run 有谁知道 assemble assembleDebug 和 assembleRelease
  • org.json.JSONException: JSONObject["address"] 不是 JSONArray

    我正在 java 中使用 org json 解析 json 我的 json 看起来像 address addressLine1 Noida addressLine2 UP firstName Achyut lastName khanna 我
  • Laravel Blade 在 php 中传递 Javascript 变量

    如何将 javascript 变量作为 php 循环中的变量传递 像这样的东西 显然不起作用 var myJsVar 100 for i 0 i
  • 确保 mongodb 中的索引

    一些问题 如果我在已经索引的字段上确保索引 它会重新索引还是简单地说 是的 我已经索引了 如果某些开发人员的机器上尚不存在该集合 mongo 会启动索引吗 我是否需要再次确保索引或者调用它一次就足够了 什么时候索引 安全 一定需要一些时间
  • 如何添加 NSMutableArray 中的所有十进制数字

    我有一个NSMutableArray其中有一些NSDecimalNumber在其中 就像 500 50 80 70 8000 现在我想添加所有这些decimal numbers一起 我尝试过使用 for NSDecimalNumber nu
  • 用表情符号替换表情符号

    我有一些文本 可能包括文本表情符号 例如 我想将它们替换为相应的表情符号 unicode 字符 and 对于上面的例子 我的目的是在此文本上运行 twimoji 我知道我可以查找和替换 但我宁愿使用已经预先构建的东西来执行此操作 有哪些库已
  • Qt 在“调试”模式下正确渲染此 SVG,但在“发布”模式下则不然

    我遇到了这个奇怪的问题 当我构建调试并链接调试 dll Qt 5 12 2 开源 时 我得到了预期的渲染 当我构建发布版本并链接到发布 dll 时 图像完全是空白的 该程序是从 MSVC 运行的 因此 dll 路径应该正确设置 有人知道发生
  • 如何使用 Python 将控制台输出重定向到 pyqt5 qplainTextEdit 小部件?

    我正在尝试在 PyQt5 的 QplainTextEdit 小部件中显示 python 脚本的控制台输出 我收到此错误 TypeError 调用元类基时出错 元类冲突 派生类的元类必须是其所有基类的元类的 非严格 子类 我已经在 pyqt
  • Protobuf 向后兼容性以及 proto3 与 proto2

    Protobuf 的卖点之一是向后兼容性 即开发人员可以改进格式 而老客户端仍然可以使用它 现在有了名为 proto3 的新 Protobuf 版本 IDL 语言本身不兼容 例如options required删除的地方是枚举的新语法 没有