• protobuf3.5.1使用的简单例子


    前言

    1. 什么是protobuf

    Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议数据存储等领域。

    2. 

    - 平台无关,语言无关,可扩展;
    - 提供了友好的动态库,使用简单;
    - 解析速度快,比对应的XML快约20-100倍;
    - 序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。

    安装

    MAC/OS 安装

    1. 下载

    https://github.com/google/protobuf/releases下载protobuf-all-3.5.1.tar.gz

    2. 解压 tar xvf protobuf-all-3.5.1.tar.gz

    3. 编译并安装

    cd protobuf.3.5.1
    ./configure
    make
    make check
    make install

    4. 验证

    protoc --version

    一个简单的例子

    1. 创建 .proto 文件

    syntax = "proto3";
    
    package tutorial;
    
    option java_package = "com.example.tutorial";
    option java_outer_classname = "AddressBookProtos";
    
    message Person {
        string name = 1;
        int32 id = 2;
        string email = 3;
    }
    
    message AddressBook {
        repeated Person people = 1;
        int32 id = 2;
    }

    2. 编译

    protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

    使用上面的命令格式生成编译很好的Java class文件

    3. 创建Maven项目,添加pom依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>protobuftest</groupId>
        <artifactId>protobuftest</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <dependencies>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>3.5.1</version>
            </dependency>
        </dependencies>
    
    
    </project>

    项目的结构如上图所示。

    4. 新建一个Test类来进行测试

    package com.example.tutorial;
    
    import java.io.IOException;
    
    public class Test {
        public static void main(String[] args) throws IOException {
            AddressBookProtos.Person.Builder pbulider = AddressBookProtos.Person.newBuilder();
            pbulider.setId(1);
            pbulider.setName("jinhong");
            pbulider.setEmail("1060951934@qq.com");
            AddressBookProtos.Person person = pbulider.build();
    
            AddressBookProtos.AddressBook.Builder builder = AddressBookProtos.AddressBook.newBuilder();
            builder.addPeople(person);
            builder.setId(1);
            AddressBookProtos.AddressBook addressBook = builder.build();
    
            System.out.println("before :" + addressBook.toString());
    
            System.out.println("addressBook byte");
            for (byte b : addressBook.toByteArray()) {
                System.out.println(b);
            }
    
            System.out.println(addressBook.toByteString());
    
            byte[] byteArray = addressBook.toByteArray();
            AddressBookProtos.AddressBook person2 = AddressBookProtos.AddressBook.parseFrom(byteArray);
    
            System.out.println("after: " + person2.toString());
        }
    }

    测试的结果如下:

    通过上面的测试,我们简单了解了protobuf的使用。后续将继续深入了解protobuf的一些细节。

    在学习的时候建议多了解下IDL(interface discription language)的概念,它是跨语言和平台的关键。

  • 相关阅读:
    IT教育课程考评系统开发-07
    2020091201-1
    ip
    输入框枚举
    语言枚举
    《岁月神偷》弹唱和弦吉他谱_六线谱
    string 转化成 string数组
    获取类的字段值
    获取类的字段
    最全的省份递归
  • 原文地址:https://www.cnblogs.com/liujinhong/p/8867391.html
Copyright © 2020-2023  润新知