(十八)Protobuf —— 优化序列化,替换 Json

版权声明:本文为博主原创文章,未经博主允许不得转载。
本文纯个人学习笔记,由于水平有限,难免有所出错,有发现的可以交流一下。

一、Protobuf 介绍

google 开源项目。序列化数据结构的方案(Json 、XML 也是),通常用于编写需要数据交换或者需要存储数据的程序。这套方案包含一种用于描述数据结构的接口描述语言(Interface Description Language)和一个生成器,用于生成描述该数据结构的不同编程语言的源代码。

序列化与反序列化:

序列化 : 将数据结构或对象转换成二进制串的过程

反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程

优缺点:
在这里插入图片描述
总结:
Protobuf 比 XML、Json 更小,更快,使用和维护更简单,但是使用范围不够广。

二、Protobuf 使用

我们可以参照 Protobuf 官网 的指南进行尝试。选择 Basics: Java 查看 java 语言的用法。

1. 在 main 文件夹下新建 proto 文件夹。
在这里插入图片描述

2. 在 proto 文件夹下新建 test.proto 文件。
在这里插入图片描述

3. 从官网拷贝 demo 代码到 test.proto 文件。

//使用 proto2,目前有 proto2 和 proto3 这两个版本,他们语法有些不同,内核实现也有所区别。
syntax = "proto2";

package tutorial;

//生成 java 源文件的包名
option java_package = "com.example.tutorial";
//生产 java 源文件的类名
option java_outer_classname = "AddressBookProtos";

//message 相当与 java 的 class
message Person {
  //required 必须设置(不能为null)
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

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

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

 //repeated 重复的(也就是指集合)
  repeated PhoneNumber phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}

这是一段 protobuf 的源文件,我们需要使用 protobuf 的编译器进行编译。

4. 编译 protobuf 代码,这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值