Protocol Buffer 简介

Protocol Buffer 简介一、ProtocolBuffer与XML、JSON的区别ProtocolBuffer和XML、JSON一样都是结构数据序列化的工具,但它们的数据格式有比较大的区别:首先,ProtocolBuffer序列化之后得到的数据不是可读的字符串,而是二进制流其次,XML和JSON格式的数据信息都包含在了序列化之后的数据中,不需要任何其它信息就能还原序列化……

一、Protocol Buffer 与 XML、JSON 的区别

  • Protocol BufferXMLJSON一样都是结构数据序列化的工具,但它们的数据格式有比较大的区别:
    • 首先,Protocol Buffer 序列化之后得到的数据不是可读的字符串,而是二进制流
    • 其次,XML 和 JSON 格式的数据信息都包含在了序列化之后的数据中,不需要任何其它信息就能还原序列化之后的数据;但使用 Protocol Buffer 需要事先定义数据的格式(.proto 协议文件),还原一个序列化之后的数据需要使用到这个定义好的数据格式
    • 最后,在传输数据量较大的需求场景下,Protocol Buffer 比 XML、JSON 更小(3到10倍)、更快(20到100倍)、使用 & 维护更简单;而且 Protocol Buffer 可以跨平台、跨语音使用
  • Protobuf 安装:
  • Protobuf 版本查看:
    • protoc --version
    • import google.protobuf as gp, gp.__version__

二、Protocol Buffer 的作用

  • 通过将结构化的数据(拥有多种属性)进行序列化,从而实现(内存与硬盘之间)数据存储和交换的功能
    • 序列化: 按照 .proto 协议文件将数据结构或对象转换成二进制流的过程
    • 反序列化:将在序列化过程中所生成的二进制流转换成数据结构或对象的过程

三、构建 Protocol Buffer 消息对象模型

这里写图片描述

1、通过 Protocol Buffer 语法描述需要存储的数据结构

  • Protocol Buffer 定义数据格式的文件一般保存在 .proto文件中,每一个 message代表了一类结构化的数据,message 里面定义了每一个属性的类型和名字
  • 一个消息对象可以将其他消息对象类型用作字段类型,情况如下:
    这里写图片描述
# 1、包名
package protocobuff_Demo;

# 2、option 选项
option java_package = "com.carson.proto";
option java_outer_classname = "Demo";


# 3、消息模型
# 3.1、生成 Person 消息对象(包含多个字段)
message Person { 
   
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType { 
   
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

# 该消息类型定义在 Person 消息类型的内部
# 即 Person 消息类型是 PhoneNumber 消息类型的父消息类型
  message PhoneNumber { 
   
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }
  
  # 直接使用内部消息类型
  repeated PhoneNumber phone = 4;
}

# 3.2 使用外部消息类型,直接使用了 Person 消息类型作为消息字段
message AddressBook { 
   
  repeated Person person = 1;
}

2、通过 Protocol Buffer 编译器编译 .proto 文件

  • 作用:将 .proto 文件 转换成对应平台(python、C++、Java)的代码文件
  • 编译指令如下所示:
# 在终端输入下列命令进行编译
protoc -I=$SRC_DIR --xxx_out=$DST_DIR   $SRC_DIR/addressbook.proto

# 参数说明
# 1. $SRC_DIR:指定需要编译的.proto文件目录 (如没有提供则使用当前目录)
# 2. --xxx_out:xxx根据需要生成代码的类型进行设置
	""" 对于 Java ,xxx = java ,即 -- java_out 对于 C++ ,xxx = cpp ,即 --cpp_out 对于 Python,xxx = python,即 --python_out """

# 3. $DST_DIR :编译后代码生成的目录 (通常设置与$SRC_DIR相同)
# 4. 最后的路径参数:需要编译的.proto 文件的具体路径

# 编译通过后,Protoco Buffer会根据不同平台生成对应的代码文件

四、参考资料

1、这是一份很有诚意的 Protocol Buffer 语法详解
2、手把手教你如何安装 Protocol Buffer

今天的文章Protocol Buffer 简介分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24594.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注