【ProtoBuf】初识 ProtoBuf


一、序列化概念

1、序列化和反序列化

  • 序列化对象转换为字节序列的过程称为对象的序列化。
  • 反序列化字节序列恢复为对象的过程称为对象的反序列化。
什么情况下需要序列化?
  • 存储数据:当我们想把的内存中的对象状态保存到⼀个文件中或者存到数据库中时。
  • 网络传输:网络直接传输数据,但是无法直接传输对象,所以要在传输前序列化,传输完成后反序列化成对象。例如:socket 编程中发送与接收数据。
如何实现序列化?
xml、json、protobuf

二、ProtoBuf 是什么

官方给出的答案:

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for
serializing structured data ‒ think XML, but smaller, faster, and simpler. You define how you
want your data to be structured once, then you can use special generated source code to
easily write and read your structured data to and from a variety of data streams and using a
variety of languages.

翻译:

Protocol Buffers 是 Google 的一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。

Protocol Buffers 类比于 XML,是一种灵活,高效,自动化机制的结构数据序列化方法,但是比 XML 更小、更快、更为简单。

你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。

简单来讲,ProtoBuf(全称为 Protocol Buffer)是让结构数据序列化的方法,其具有以下特点:

  • 语言无关、平台无关:ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台。

  • 高效:比 XML 更小、更快、更为简单。

  • 扩展性、兼容性好:可以更新数据结构,而不影响和破坏原有的旧程序。


三、ProtoBuf 的使用特点

  1. 编写 .proto 文件,目的是为了定义结构对象(message)及属性内容。
  2. 使用 protoc 编译器编译 .proto 文件,生成一系列接口代码,存放在新生成头文件和源文件中。
  3. 依赖生成的接口,将编译生成的头文件包含进我们的代码中,实现对 .proto 文件中定义的字段进行设置和获取,和对 message 对象进行序列化和反序列化。

使用特点:ProtoBuf 是需要依赖通过编译生成头文件源文件来使用的

有了这种代码生成机制,开发人员再也不用吭哧吭哧地编写那些协议解析的代码了(干这种活是典型的吃力不讨好)。

相关推荐

  1. <span style='color:red;'>protobuf</span>

    protobuf

    2024-07-16 17:36:08      47 阅读
  2. protobufprotobuf 开发 (二)

    2024-07-16 17:36:08       32 阅读
  3. Protobuf 反射技术简介

    2024-07-16 17:36:08       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 17:36:08       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 17:36:08       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 17:36:08       57 阅读
  4. Python语言-面向对象

    2024-07-16 17:36:08       68 阅读

热门阅读

  1. py每日spider案例之影视搜索篇

    2024-07-16 17:36:08       19 阅读
  2. Linux内核 -- 用户态coredump处理之do_coredump函数

    2024-07-16 17:36:08       24 阅读
  3. 什么是MATLAB许可证协议书

    2024-07-16 17:36:08       22 阅读
  4. InnoDB 存储结构与索引页结构

    2024-07-16 17:36:08       21 阅读
  5. C++ 入门13:异常处理

    2024-07-16 17:36:08       17 阅读
  6. Nim 游戏

    2024-07-16 17:36:08       24 阅读
  7. 用Racket做一个拼图游戏——31 创建主程序

    2024-07-16 17:36:08       23 阅读
  8. Python使用蓝牙抓包

    2024-07-16 17:36:08       18 阅读
  9. ## 基础知识

    2024-07-16 17:36:08       21 阅读
  10. C# 4.0 等待线程结束

    2024-07-16 17:36:08       23 阅读
  11. leetcode hot 100 刷题记录(medium)

    2024-07-16 17:36:08       22 阅读