zoukankan      html  css  js  c++  java
  • 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)的概念,它是跨语言和平台的关键。

  • 相关阅读:
    技术周刊 · 耿耿星河欲曙天 | SpaceX 上的前端架构;跨平台新选择;开源世界的新“大门”;用户推荐算法的敲门砖……
    说说SVG的feTurbulence滤镜
    机器学习进阶
    小程序与动画的故事
    技术周刊 · 迢迢山径峻 | Web 开发成长图谱;下一代前端构建技术;AI 应用下支离破碎的真实;不懂产品不会开发;虚拟货币是新时代的黄金
    从中断机制看 React Fiber 技术
    三分钟了解数字人民币
    凹凸技术揭秘:如何服务 toG 项目——数字人民币项目前端总结
    使用 Phaser3+Matter.js 实现“合成大西瓜”游戏
    痞子衡嵌入式:快速定位i.MXRT600板级设计ISP[2:0]启动模式引脚上电时序问题的方法
  • 原文地址:https://www.cnblogs.com/liujinhong/p/8867391.html
Copyright © 2011-2022 走看看