com.google.protobuf 入门教程

428 阅读1分钟

Protocol Buffers

Protocol Buffers是兼容任意开发语言,兼容任意平台的数据存储结构格式。比xml的存储方式占用空单更少,读取更快,更简单。可用任意主流开发语言轻轻松松读写。

官方文档

学习如何使用 protobuf 的最佳方式是跟随我们 开发者指南中的教程

如果您希望通过代码示例来学习,请查阅 examples 目录 中的例子。

完整的文档可在 Protocol Buffers 文档网站 上找到。

Git

github.com/google/prot…

镜像Git源码

gitcode.com/gh_mirrors/…

可选开发语言列举

C++, C#, Dart, Go, Java, Kotlin, Objective-C, Python, Ruby 如果使用版本: proto3,也可用于 PHP.

示例

//1. , 创建一个数据结构protobuf文件:message.proto

message Person {
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;
}

使用Java创建导出一个Proto

shell指令生成java类: protoc --java_out=. message.proto 指令生成:Person.java文件。

app/build.gradle添加库

plugins {
  id "com.google.protobuf" version "0.9.4"
  }

java中使用

 
public class Main {
    public static void main(String[] args) {
        // 创建一个Person对象并设置字段
        Person person = Person.newBuilder()
                .setName("John Doe")
                .setAge(30)
                .setIsStudent(true)
                .build();
 
        // 序列化Person对象到二进制
        byte[] bytes = person.toByteArray();
 
        // 反序列化二进制数据到Person对象
        Person receivedPerson = Person.parseFrom(bytes);
 
        // 打印结果
        System.out.println("Name: " + receivedPerson.getName());
        System.out.println("Age: " + receivedPerson.getAge());
        System.out.println("Is Student: " + receivedPerson.getIsStudent());
    }
}

//2. 使用C++ 调用上面Java导出的protobuf对象

// Java code
Person john = Person.newBuilder()
    .setId(1234)
    .setName("John Doe")
    .setEmail("jdoe@example.com")
    .build();
output = new FileOutputStream(args[0]);
john.writeTo(output);

//3.使用其他语言调用1(java)创建的protobuf

快速导入

  1. 下载源码编译:github.com/protocolbuf…
  2. 查询使用文:protobuf.dev/overview
  3. 使用自己熟悉的开发语言,练习:protobuf.dev/getting-sta…

Protobuf 的使用 (java)

  1. 创建一个.proto文件,定义好消息体

  2. 用protobuf编译器编译生成java文件

  3. import生成的java文件到需要使用的类中,就可以使用protobuf

更详情文档:juejin.cn/spost/74605…