【ProtoBuf】1.初识ProtoBuf

v2-51ee98b05ce2ada206b744b6ff86cbd1_r
————————————每一个不曾起舞的日子都是对生命的辜负。

一. 序列化概念

日常生活中,手机上收到的语音消息在网络中不能直接进行传输,而是通过一系列的信号,比如网络中二进制序列的转换,在传出时将语音消息转化成二进制序列进行网络传输,收到消息时再将二进制序列转化成语音消息,这种过程实际上就是序列化。

image-20230520151823201

我们写的代码同样如此,网络中传输的也一定不是直接创建的对象,而是通过对象转换的二进制序列进行传输。将对象转化为二进制序列的过程称为序列化过程,最后将二进制序列恢复为对象的过程称为反序列过程。

image-20230520153531906

由此可见,上述所说的都是在网络传输中使用。而在本地中,内存中的结构化数据也就是对象只有序列化才能放到文件里面去,这个过程同样需要序列化。此外,数据库、缓存等传入传出同样涉及序列化。

  • 所以什么是序列化和反序列化?

序列化: 把对象转换为字节序列的过程,称为对象的序列化。

反序列化: 把字节序列恢复为对象的过程?称为对象的反序列化。

  • 如何实现序列化?

通过Json、XML、ProtoBuf可以实现序列化。(本文讲的就是ProtoBuf)

二. ProtoBuf

1. 什么是Proto

### 下载 可以前往https://github.com/protocolbuffers/protobuf/tags挑选Protobuf 3.25.1版本,或者直接通过链接https://github.com/protocolbuffers/protobuf/releases/download/v3.25.1/protobuf-all-3.25.1.tar.gz 进行下载。若使用wget下载失效,可前往https://github.com/protocolbuffers/protobuf/releases/tag/v3.25.1手动点击下方protobuf-all-3.25.1.tar.gz进行下载 [^1]。 ### 使用方法 #### 通用步骤 1. 解压源码包: ```bash tar -zxvf protobuf-all-3.25.1.tar.gz ``` 2. 设置编译目录,生成protobuf的runtime环境,即生成`libprotoc.lib`、`libprotobuf.lib` 与protobuf协议编译工具`protoc` [^1][^3]。 #### 不同系统和语言下的使用 - **C++项目**:创建C++项目并引入相关库和头文件protobuf只支持C/C++,protobuf - c能支持C,但不属于google维护。例如编写协议文件`Person.proto`: ```protobuf message Person { required string name = 1; required int32 age = 2; optional string email = 3; } ``` 使用`protoc`编译协议文件: ```bash protoc --cpp_out=./ Person.proto ``` 将生成的协议编解码代码拉入到编译器编译,进行协议类的编码和解码,根据协议类型来构造对应的协议对象(工厂模式) [^3]。 - **Python项目**:在Python项目中使用时,安装好Protobuf 3.25.1后,同样编写`.proto`文件,使用`protoc`编译生成Python代码,示例如下: ```protobuf // example.proto syntax = "proto3"; message Example { string message = 1; } ``` 编译命令: ```bash protoc --python_out=. example.proto ``` 在Python代码中使用生成的类: ```python import example_pb2 # 创建消息实例 example = example_pb2.Example() example.message = "Hello, Protobuf!" # 序列化 serialized_data = example.SerializeToString() # 反序列化 new_example = example_pb2.Example() new_example.ParseFromString(serialized_data) print(new_example.message) ``` ### 更新内容 要了解Protobuf 3.25.1版本相对之前版本的更新内容,可在https://github.com/protocolbuffers/protobuf/releases/tag/v3.25.1 该版本的发布页面查看官方更新日志,其中会详细记录此版本相对之前版本的改动、新增特性、修复的问题等信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天都要进步呀~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值