背景:工作中遇到需要参与 pb 文件解析时,我这里主要指行情相关配置文件。
系统:elementary OS 5.1.7 Hera(基于 Ubuntu 18.04.6 LTS 构建)
不知道是因为 Ubuntu 太旧导致源中的 protobuf-compiler 太旧,又或者官方更新太频繁 Ubuntu ppa 不愿意同步,记录一下简单的卸载与安装。
如果商店的 protobuf 版本刚好是自己需要的版本着无需折腾(sudo apt install protobuf-compiler
)。不然~
源文件下载
官方的 release 包是托管在 GitHub 的:https://github.com/protocolbuffers/protobuf/releases
按需选择对应架构的源码包,我这里选择:protobuf-all-21.5.tar.gz
编译/安装
解压上述源码包,cd 到解压目录,执行:
./configure
接着编译的常规套路:
make && make install
PS:根据每个系统环境的不同,make install 可能需要 sudo 提权。
不出意外安装完成可以看看版本:
protoc --version
卸载
在源码目录执行(根据安装时的权限,也可能需要 sudo):
make uninstall
用法
至于这个东西怎么用~ 就看需求方要求,Python 就转成 Python 脚本,Java 就转 Java 代码,pb 文件转完才能用。因为它本身是一种数据协议:
Protocol Buffers(简称:ProtoBuf)是一种开源跨平台的序列化资料结构的协议。其对于储存资料或在网络上进行通讯的程式是很有用的。这个方法包含一个接口描述语言,描述一些资料结构,并提供程式工具根据这些描述产生程式码,这些代码将用来生成或解析代表这些数据结构的字节流。
例如:
转 Python:
protoc --python_out=./pb/py --proto_path=./pb/ ./pb/*.proto
转 Java:
protoc --java_out=./pb/java --proto_path=./pb/ ./pb/*.proto
转 OC:
protoc --objc_out=./pb/oc --proto_path=./pb/ ./pb/*.proto
其他
多出来的那些文件就是我们需要用的文件,至于针对 Java 文件太大的情况,需要做下分包。这部分参考:
https://developers.google.com/protocol-buffers/docs/reference/java-generated
翻译下就是(搬运):
--java_out=
当使用命令行标志调用协议缓冲区编译器时,会产生 Java 输出。该--java_out=
选项的参数是您希望编译器编写 Java 输出的目录。对于每个.proto
文件输入,编译器都会创建一个包装.java
文件,其中包含一个代表.proto
文件本身的 Java 类。
如果.proto
文件包含如下行:
option java_multiple_files = true;
.java
然后编译器还为文件中声明的每个顶级消息、枚举和服务创建一个单独的.proto
文件。
否则(即选项为 false 时;这是默认值),上述包装类也用作外部类,并为文件java_multiple_files
中声明的每个顶级消息、枚举和服务生成类/枚举 .proto
都嵌套在外部包装类中。
举栗:
syntax = "proto3"; package HqPcDef; //加文件头在这里 option java_multiple_files = true; ...
在 Android 上的使用
参考:https://mp.weixin.qq.com/s/sgFFoWM0-AAvwFqmfFj6Jg 我就不搬运了。
以上;
参考:
https://developers.google.com/protocol-buffers/docs/reference/overview
本站由以下主机服务商提供服务支持:
0条评论