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)的概念,它是跨語言和平台的關鍵。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM