- Protocol Buffers 教程
- Protocol Buffers - 首页
- Protocol Buffers - 简介
- Protocol Buffers - 基本应用
- Protocol Buffers - 结构
- Protocol Buffers - 消息
- Protocol Buffers - 字符串
- Protocol Buffers - 数字
- Protocol Buffers - 布尔值
- Protocol Buffers - 枚举
- Protocol Buffers - 重复字段
- Protocol Buffers - 映射
- Protocol Buffers - 嵌套类
- Protocol Buffers - 可选字段和默认值
- Protocol Buffers - 语言无关性
- Protocol Buffers - 复合数据类型
- Protocol Buffers - 命令行使用
- Protocol Buffers - 更新定义规则
- Protocol Buffers - 与 Kafka 集成
- Protocol Buffers - 在其他语言中的使用
- Protocol Buffers 有用资源
- Protocol Buffers - 快速指南
- Protocol Buffers - 有用资源
- Protocol Buffers - 讨论
Protocol Buffers - 命令行使用
概述
Protobuf 将数据序列化并以二进制格式存储。如果我们只是处理字符串,这可能不是问题,因为最终 Protobuf 使用 UTF-8。因此,如果使用支持 UTF8 的阅读器,它存储的任何文本都是人类可读的。但是,诸如int32、布尔值、列表、映射之类的内容使用特定的技术进行编码以减少空间消耗。
因此,有时通过简单的命令行实用程序对消息进行编码/解码对于测试目的很有用。让我们看看它是如何工作的 -
假设我们使用以下简单的“greeting_cli.proto” -
syntax = "proto3"; package tutorial; option java_package = "com.tutorialspoint.greeting"; message Greet { string greeting = 1; string username = 2; int32 age = 3; }
并且我们在cli_greeting_message中创建一条消息 -
greeting: "Yo" username : "John" age : 50
现在,让我们使用 Protobuf CLI 工具对这条消息进行编码 -
cat .\cli_greeting_msg.proto | protoc --encode=tutorial.Greet .\greeting_cli.proto > encoded_greeting
如果我们查看此文件内部的内容或cat此文件 -
cat .\encoded_greeting ☻Yo↕♦John↑2
您会注意到除了“Yo”和“John”之外的一些奇怪字符。这是因为这些编码可能不是有效的 Unicode/UTF-8 编码。一般来说,UTF-8 是大多数地方使用的东西。在 Protobuf 的情况下,这用于字符串,但整数、映射、布尔值、列表具有单独的格式。此外,此文件还包含数据的元数据。
因此,我们需要一个解码器/反序列化器来读取此数据。让我们使用它。
cat .\encoded_greeting | protoc --decode=tutorial.Greet .\greeting_cli.proto greeting: "Yo" username : "John" age : 50
因此,正如我们所看到的,我们能够获取已序列化并在文件中看起来很奇怪的数据。
广告