Google Protobuf 序列化框架

  1. Protobuf 简介
  2. Protobuf 使用
  3. 以 java 平台使用 Protobuf 为例

Protobuf 简介

谷歌开发的序列化框架

跨平台、跨语言

通常用于通信协议、数据存储

相比于 xml json 等序列化方式,它的体积会小很多,所以性能较高

Protobuf 使用

1、编写描述文件
2、使用 Protobuf 专用编译器编译成对应平台的语言
3、将编译好的代码引入项目中

以 java 平台使用 Protobuf 为例

1、在 idea 中安装配置文件编辑器

不装也没关系,只是为了有一个高亮的提示

2、编写配置文件, 语法 参考官网

  • 第三行 classname 就是生成后的 java 类名称
  • int32 会自动被编译器转成 java 对应的类型
  • 字段后面的数字代表序列化的顺序

3、安装编译器

访问链接 https://github.com/protocolbuffers/protobuf/releases

选择对应的压缩包

解压、添加环境变量

确认安装成功

4、编译

打开控制台,进入刚刚 .proto 文件的路径下

cd IdeaProjects\shar_netty\src\main\java\com\shar\netty\netty\protobuf

执行编译命令 protoc --java_out=. user.proto

此时生成了序列化文件

此时,java 文件还是报错的

需要我们手动指定包路径

5、Protobuf: Hello World

@Test
public void test() throws InvalidProtocolBufferException {
    UserMessage.User.Builder builder = UserMessage.User.newBuilder();
    UserMessage.User user = builder.setId(99).build();
    // 序列化
    byte[] bytes = user.toByteArray();
    // 反序列化
    UserMessage.User user1 = UserMessage.User.newBuilder().mergeFrom(bytes).build();
    System.out.println(user1);
}

断点调试,看看上面的 bytes,你会发现,才 2 个字节!

java 自带的序列化有几个字节呢?127!


转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:Google Protobuf 序列化框架

字数:388

本文作者:夏来风

发布时间:2020-08-15, 23:58:34

原始链接:http://www.demo1024.com/blog/protobuf/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。