您能否将多个不同的值类型分配给重复的 Protobuf 消息中的一个字段?

2024-03-23

我正在尝试对客户端进行逆向工程,该客户端将音频文件上传到服务器,然后在单独的请求中上传文件的元数据。元数据在 Protobuf 中序列化,并且使用相当简单且可读的结构。这是之后的样子protoc --decode_raw:

1 {
  1: "title"
  2: "This is the audio title"
}
1 {
  1: "tags"
  2 {
  }
}
1 {
  1: "loc"
  2: "This is the location"
}
1 {
  1: "transcription"
  2: "A transcript"
}
1 {
  1: "mapping"
  2 {
    1 {
      1: 6
      2 {
        3: 840
      }
    }
    2: 6
  }
}

这似乎只是现场重复的消息1每次保存一个键值对,但有时该值是一个字符串,有时它是一个更复杂的消息。他们如何将字符串和消息分配给字段2如果 Protobuf 只允许每个字段使用一种值类型?如果我要制作自己的请求,我需要这样的东西:

message KeyValuePair {
    string key = 1;
    oneof value {
        string str_value = 2;
        MessageValue msg_value = 2;
    }
}

但这是行不通的,因为Field number 2 has already been used in "package.name" by field "str_value"。有任何想法吗?我将使用 Python 创建和发送请求数据。


有一个官方的方法可以实现这一点:google.protobuf.Any https://developers.google.com/protocol-buffers/docs/reference/python-generated#any

如果 protobuf 模式在顶层定义了 any,例如:

message Root {
  repeated google.protobuf.Any value = 1;
}

message Title {
  string title= 2;
}

message Tags {
  string name = 1;
  repeated string tags = 2;
}

然后任何 Protobuf 定义类型的消息都可以在列表中序列化。

然而,我不think这就是现有代码正在做的事情:

  • 原始输出为Any通常包括type.googleapis.com输入网址
  • Using Any, title / loc 字段将封装在嵌套对象中,而不是同一级别的字符串中。

E.g.:

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

您能否将多个不同的值类型分配给重复的 Protobuf 消息中的一个字段? 的相关文章

  • 在原型中,如何将地图定义为自定义选项

    在我的原型文件中 我想将地图定义为自定义选项 尝试了一些方法 但没有一个起作用 我的元数据原型文件 syntax proto2 import google protobuf descriptor proto package com util
  • App Engine 和 Commons FileUpload

    我正在使用以下代码从 Android 设备发送一条使用 google 协议缓冲区构建的消息 Set up the HttpClient HttpClient client new DefaultHttpClient String url h
  • 如何弃用 Protocol Buffers 中的整个消息?

    根据文档 https developers google com protocol buffers docs proto 已弃用 字段选项 如果设置为 true 则表示该字段已弃用 并且不应由新代码使用 使用示例 message Foo s
  • C# RestSharp PUT 方法并发送原始字节 (protobuf)

    如何使用 HTTP PUT 方法发送字节数组 方法AddFile班级的RestRequest发送额外的标头 方法AddParameter需要一个Object type 我是怎么做的 byte data using var ms new Me
  • 您能否将多个不同的值类型分配给重复的 Protobuf 消息中的一个字段?

    我正在尝试对客户端进行逆向工程 该客户端将音频文件上传到服务器 然后在单独的请求中上传文件的元数据 元数据在 Protobuf 中序列化 并且使用相当简单且可读的结构 这是之后的样子protoc decode raw 1 1 title 2
  • 有没有办法在 protobuf (proto2) 中创建类型别名?

    是否可以创建 protobuf 标量类型的别名 例如 我想使用Sequence替代string 即使它们是二进制等价的 我的近期目标是使文档 使用 protoc gen doc 生成 更容易理解 理想情况下 这种类型应该用支持类型检查的语言
  • protobufs 格式的原始解码器

    我想找到一种方法将二进制 protobuf 消息转换为所包含数据的人类可读描述 而不使用 proto 文件 背景是我有一条 proto 消息 它被 Android 上的解析器拒绝 但还不完全清楚原因 我可以手动浏览该消息 但这相当乏味 I
  • 如何直接从protobuf创建GRPC客户端而不将其编译成java代码

    使用 gRPC 时 我们需要通过协议缓冲区编译器 protoc 或使用 Gradle 或 Maven protoc 构建插件从 proto 服务定义生成 gRPC 客户端和服务器接口 Flow now protobuf file gt ja
  • protobuf中流消息实现的比较

    对同一类型的多个消息进行编码的每种流实现的权衡 优点和缺点是什么 它们有什么不同吗 我想要实现的是将盒子向量存储到 protobuf 中 Impl 1 package foo message Boxes message Box requir
  • 从流中读取多个 protobuf 消息的 python 示例

    我正在处理来自 spinn3r 的数据 它由序列化为字节流的多个不同的 protobuf 消息组成 http code google com p spinn3r client wiki Protostream http code googl
  • Java中如何处理未知的protobuf字段?

    我有一个 Java 应用程序 它从另一台计算机读取一些 protobuf 数据 然后修改一些值并将其写回 用户很可能使用过时的 proto 文件读取数据 因此在这种情况下会有一些字段无法理解 我最终希望在写回所做的更改时保留未知的数据 但是
  • 协议缓冲区和 UTF-8

    编码方案 多操作系统和 Endian nes 的历史导致了对所有形式的字符串数据 即所有字母表 进行编码方面的混乱 因此 协议缓冲区仅处理其字符串类型中的 ASCII 或 UTF 8 并且我看不到任何接受 C wstring 的多态重载 那
  • 将 JSON 对象转换为 protobuf IStruct

    我正在使用Nodejs 的 Dialogflow API https cloud google com nodejs docs reference dialogflow 0 8 x google cloud dialogflow v2 这个
  • gRPC + 图片上传

    我想创建一个简单的gRPC用户可以上传他 她的图片的端点 协议缓冲区声明如下 message UploadImageRequest AuthToken auth 1 An enum with either JPG or PNG FileTy
  • 使用 google.protobuf.Timestamp 在 Go 中解析带有时区偏移的日期时间戳

    我正在创建一个将使用 GRPC 和 protobuf 的 Go 应用程序 我的 RPC 服务应获取包含类型的消息google protobuf Timestamp 解析它并最终将其保存在数据库中或对其执行更多操作 我对什么被认为是该类型的有
  • 找不到 io.confluence:kafka-protobuf-serializer:6.0.0

    直接的问题是 为什么 Gradle 没有解决我添加的这个依赖关系 dependencies kafka protobuf serializer implementation io confluent kafka protobuf seria
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 您可以用 Google 的 Protocol Buffer 格式表示 CSV 数据吗?

    我最近发现了协议缓冲区 想知道它们是否可以应用于我的特定问题 基本上 我有一些 CSV 数据 需要将其转换为更紧凑的格式以进行存储 因为其中一些文件有几GB CSV中的每个字段都有一个标题 并且只有两种类型 字符串和小数 因为有时有很多有效
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9

随机推荐

  • 创建圆形条形图

    我正在尝试使用我的数据创建圆形条形图 但我什至无法组织数据框来做到这一点 我对来自 3 个不同年份 名为 Campana 的列 和来自一个省的 4 个地区 名为 zona 的列 的 121 个种子进行了分析 我想制作一个如图所示的图表 使用
  • Angular 6:获取对 ng-container 标签内使用 *ngFor 创建的组件的引用

    我使用 ng container 迭代列表并创建组件
  • 关于在 SQL Server 中实现审计表的建议?

    我过去使用的一种简单方法基本上只是创建第二个表 其结构反映了我想要审核的表 然后在主表上创建一个更新 删除触发器 在更新 删除记录之前 当前状态通过触发器保存到审计表中 审计表中的数据虽然有效 但并不是最有用或最容易报告的 我想知道是否有人
  • 无法使用 C# 连接到密码加密的 MS Access 2016 数据库

    当我尝试连接到 MS Access 2016 数据库时 它无需密码即可完美连接 但是当我在使用密码加密后尝试连接到同一数据库时 出现以下错误 无法打开数据库 它可能不是您的应用程序识别的数据库 或者文件可能已损坏 我不知道我应该做什么 我的
  • 带有auto的initializer_list包含多个表达式

    相当简单的问题 auto x11 1 2 3 4 auto x1 1 2 3 4 auto x22 1 0 2 25 3 5 auto x2 1 0 2 25 3 5 据我了解 这里应该没有什么区别 或不 但是 使用 llvm clang
  • OpenJPA 2.1.1 - 找不到元素“persistence”的声明

    我刚刚下载了http www apache org dyn closer cgi openejb 4 0 0 beta 1 apache tomee 1 0 0 beta 1 webprofile zip http www apache o
  • 如何发出返回引用的动态方法?

    我正在浏览 ref 返回的来龙去脉 并且在发出由 ref 返回的动态方法时遇到问题 手工制作的 lambda 表达式和现有方法按预期工作 class Widget public int Length delegate ref int Wid
  • 如何键入组织捕获的动态文件条目

    我试图弄清楚是否有某种方法可以创建动态文件名以在 emacs org mode 中捕获 z test entry file headline A date specific headline Notes prompt 是否有一些简单的方法将
  • 如何进入android studio中的文件资源管理器

    好吧 我不知道如何进入 android studio 中的文件资源管理器 我已经尝试搜索堆栈溢出 并发现了我所问的相同问题 但那里的解决方案不起作用 那么有人可以通过屏幕截图告诉我如何进入文件资源管理器吗 对于 Android Studio
  • 如何检查字符串中是否包含特定单词?

    a how are you if strpos a are false echo true 在 PHP 中 我们可以使用上面的代码来检查字符串是否包含特定单词 但是如何在 JavaScript jQuery 中执行相同的功能 你可以为此使用
  • 如何修复 flutter 上的“simple_permissions”错误?

    当我在 flutter 项目上运行包含 simple permissions 的代码时出现错误 Initializing gradle Resolving dependencies Running Gradle task assembleD
  • 散景中的多线悬停

    正如在这个问题中 多线散景和 HoverTool https stackoverflow com questions 32975709 bokeh multi line and hovertool 我发现悬停工具没有针对多线图实现 这是一个
  • 从 UIWebView 创建 PDF 文件

    void createPDFfromUIView UIView aView saveToDocumentsWithFileName NSString aFilename Creates a mutable data object for u
  • 有没有办法在 Objective-C 中使用 Swift 结构而不将它们作为类?

    我有几个简单的structs在 swift 文件中用 swift 编写 这些structs非常简单 几乎只包含字符串 struct Letter struct A static let aSome String descASome stat
  • 汇总数据框忽略重复

    我有一个数据框 其中一列中有重复的条目 我想根据该专栏总结其他专栏 我希望摘要在进行摘要时考虑每个唯一条目而不是总数 例如 在下面的数据框示例中 如果我想回答以下问题受访者中有多少人是年轻人 中年人和老年人 RefID 1 1 在总结 ag
  • 如何解决错误:预期标识符或“(”

    我正在编程的东西有问题 我一遍又一遍地收到这个错误 jharvard appliance Dropbox pset1 make mario clang ggdb3 O0 std c99 Wall Werror mario c lcs50 l
  • (obj == null) vs (null == obj)?

    我的老板说我应该使用null obj 因为它比obj null 但他不记得为什么要这样做 有什么理由使用null obj 我以某种方式感觉到了 相反 经过谷歌搜索后 我唯一发现的是 在 C 中 它可以防止您意外地在条件结构中键入 obj n
  • iPhone文档文件夹库/缓存安全问题

    我开发了一款iOS应用程序 出于安全原因 我将所有音频 视频文件下载到下的 Documents 文件夹中库 缓存 对于使用 iTunes 最终用户无法备份此视频 但有些外部软件很容易打开库 缓存并从此文件夹下载所有文件 我的问题是如何保护此
  • 如何在IntelliJ 2021.2.2中使用Lombok插件?

    我是从 C 开始接触 Java 的 我一直在努力熟悉这门语言 我正在尝试使用 IntelliJ IDEA 的 lombok 插件 但它似乎根本不适合我 这是我的IDEA无法识别 value 注释的屏幕截图 https i stack img
  • 您能否将多个不同的值类型分配给重复的 Protobuf 消息中的一个字段?

    我正在尝试对客户端进行逆向工程 该客户端将音频文件上传到服务器 然后在单独的请求中上传文件的元数据 元数据在 Protobuf 中序列化 并且使用相当简单且可读的结构 这是之后的样子protoc decode raw 1 1 title 2