干货!一文掌握Protobuf所有语言所有用法,快收藏!
本文介绍 干货!一文掌握Protobuf所有语言所有用法,快收藏!
干货!一文掌握Protobuf所有语言所有用法,快收藏!
本文由林大佬原创,转载请注明出处,来自腾讯、阿里等一线AI算法工程师组成的QQ交流群欢迎你的加入: 1037662480
说实话,Protobuf这个库,让人相见时难别亦难,东风无力百花残,每次等到要用它的时候,总感觉还没有完全掌握它的用法,而实际上等去百度或者谷歌的时候,教程都是多么的凌乱不堪。学会它,最直接关系到的,我能想到的应用最广的两个领域,一个是Tensorflow,几乎你的模型存储都需要和它打交道,另一个是机器人领域,比如你用ROS,很多公司会用Protobuf代替ROS原生的消息写法,再比如百度Apollo里面的消息定义全是Protobuf的方式。
Protobuf具有啥优点咱juice不在赘述了,速度快,跨平台,跨语言啥的,我认为最好的可能还是一次定义永久使用吧,不管你啥语言都有很好的方式去parse,去定义,去修改。但是难就难在这个地方,它并没有我们的传统的yml,json,xml那么直观。有时候甚至有点复杂。今天这篇文章就是教你如何掌握它。
Python下的用法
先从简单的说起吧,先说一下python下面要怎么用。
1. Protobuf的定义和保存
第一步就是定义,然后我们把它保存到pb的二进制格式。比如我们定义一个很简单的Proto:
|
|
我们定义了一个公司,公司里面很多个员工,员工也分为很多属性。把它做成一个python 文件:
protoc a.proto --python_out=./
这样的话,你可以拿到生成的数据类型了,我们主要看两个用法:
- 创建一个Company,塞进去两个员工,结果保存为二进制和pbtxt文件;
- 反过来读取这个二进制和这个pbtxt文件。
|
|
这样就ok了。 生成的pbtxt可以直接查看。
读取如何读取呢? 其实也很简单:
|
|
至此,我们完成了python的probuf文件的写入和读取。当然,如你想直接保存二进制或者读取二进制,可以直接用SerializeToString的方法,这里serialize并非是string,而是二进制。
后面我们会继续更新C++场景下的protobuf使用方法。
- 原文作者:金天
- 原文链接:https://jintian93.github.io/post/2020_06_03_11_%E5%B9%B2%E8%B4%A7%E4%B8%80%E6%96%87%E6%8E%8C%E6%8F%A1Protobuf%E6%89%80%E6%9C%89%E8%AF%AD%E8%A8%80%E6%89%80%E6%9C%89%E7%94%A8%E6%B3%95%E5%BF%AB%E6%94%B6%E8%97%8F/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。