成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Protocol Buffers學(xué)習(xí)筆記

habren / 2338人閱讀

摘要:學(xué)習(xí)筆記簡介是發(fā)明的一種數(shù)據(jù)交換格式,獨立于語言,獨立于平臺。此包可以對消息進行序列化和反序列化。端已經(jīng)接收到消息。至此中使用的實例就完成了。參考官方文檔中使用

Protocol Buffers學(xué)習(xí)筆記 1. 簡介

Protocol Buffers是google發(fā)明的一種數(shù)據(jù)交換格式,獨立于語言,獨立于平臺。與其他的數(shù)據(jù)交換格式有所不同,Protocol Buffers是一種二進制的格式,因此在網(wǎng)絡(luò)傳輸?shù)臅r候效率更高,相對于json它的文件體積更小,相對于xml,它的解析速度更快。

作為一種效率和兼容性都很優(yōu)秀的二進制數(shù)據(jù)傳輸格式,可以用于網(wǎng)絡(luò)傳輸、配置文件、數(shù)據(jù)存儲等領(lǐng)域。

2. 在java中的使用 2.1 新建test.proto文件
syntax = "proto2";

package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

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

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}
2.2 編譯protot文件

下載編譯器:

https://github.com/google/pro...

一般在每個發(fā)布版本的protoc-{版本號}-{平臺}.zip壓縮包里面包含對應(yīng)的編譯器。由于LZ用的是win系統(tǒng),故下載了protoc-3.6.1-win32.zip,解壓之后在bin目錄下會看到一個proto.exe文件。在proto.exe所在的目錄下面就可以使用protoc命令進行編譯了。

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

實例:

C:UserswangjunDownloads>protoc -I=./ --java_out=./ ./test.proto

編譯成功后會在當前目錄下生成對用的java文件:

C:UserswangjunDownloadscomexample	utorialAddressBookProtos.java
2.3 在項目中使用編譯好的java文件

新建一個java工程,目錄結(jié)構(gòu)如下:

com
    ├─example
    │  └─tutorial
    │          AddressBookProtos.java
    │
    └─wangjun
        └─protoc
                Client.java
                Constants.java
                Server.java

導(dǎo)入protobuf-java-3.5.1.jar(LZ使用的是此版本,讀者請自行下載適用版本)。此包可以對ProtocolBuffer消息進行序列化和反序列化。

編寫實例代碼:

1)Constants.java
package com.wangjun.protoc;

public class Constants {

    public static final int PORT = 9988;
}
2)Server.java
package com.wangjun.protoc;

import java.net.ServerSocket;
import java.net.Socket;

import com.example.tutorial.AddressBookProtos;
import com.google.protobuf.ByteString;

public class Server {
    
    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(Constants.PORT);
        System.out.println("server started...");
        Socket socket = ss.accept();
        System.out.println("a client connected!");
        //從輸入流中解析出Person對象
        AddressBookProtos.Person person = AddressBookProtos.Person.parseFrom(ByteString.readFrom(socket.getInputStream()));
        if(person != null) {
            System.out.println("server received data:
" + person.toString());
        }
    }

}
3)Client.java
package com.wangjun.protoc;

import java.io.OutputStream;
import java.net.Socket;

import com.example.tutorial.AddressBookProtos;

public class Client {
    public static void main(String[] args) throws Exception {
        
        Socket socket = new Socket("localhost", Constants.PORT);
        //構(gòu)造一個Person對象
        AddressBookProtos.Person person = AddressBookProtos.Person.newBuilder().setName("zhangsan")
                .setId(20).setEmail("[email protected]").build();
        OutputStream os = socket.getOutputStream();
        //將Person對象寫到輸出流中
        os.write(person.toByteArray());
        os.flush();
        //這里注意一定要關(guān)閉流,否則服務(wù)端會報錯
        os.close();
        System.out.println("client send person");
    }

}
2.4 測試

先運行server。

server started...

再運行client。

client send person

server端已經(jīng)接收到消息。

server started...
a client connected!
server received data:
name: "zhangsan"
id: 20
email: "[email protected]"

至此java中使用ProtocolBuffer的實例就完成了。

參考:

官方文檔 https://developers.google.com...

Java中使用Protocol Buffer https://blog.csdn.net/yubo_72...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76573.html

相關(guān)文章

  • 如何在PHP中處理Protocol Buffers數(shù)據(jù)

    摘要:我們知道是定義的一種跨語言跨平臺可擴展的數(shù)據(jù)傳輸及存儲的協(xié)議,因為將字段協(xié)議分別放在傳輸兩端,傳輸數(shù)據(jù)中只包含數(shù)據(jù)本身,不需要包含字段說明,所以傳輸數(shù)據(jù)量小,解析效率高。官方只支持,如果想在中使用,需要借助于第三方的擴展,使用方法如下。 我們知道Protocol Buffers是Google定義的一種跨語言、跨平臺、可擴展的數(shù)據(jù)傳輸及存儲的協(xié)議,因為將字段協(xié)議分別放在傳輸兩端,傳輸數(shù)據(jù)...

    ivyzhang 評論0 收藏0
  • php中使用protobuffer

    摘要:簡介是谷歌出品的跨平臺跨語言可擴展的數(shù)據(jù)傳輸及存儲的協(xié)議,是高效的數(shù)據(jù)壓縮編碼方式之一。相比于來說,更加小巧,更加快速,更加簡單。此外,由于其在內(nèi)網(wǎng)高效的數(shù)據(jù)交換效率,是被廣泛應(yīng)用于微服務(wù)的,在谷歌的開源框架即是基于此構(gòu)建起來的。 Protobuf 簡介 protobuf(Protocol buffers)是谷歌出品的跨平臺、跨語言、可擴展的數(shù)據(jù)傳輸及存儲的協(xié)議,是高效的數(shù)據(jù)壓縮編碼方...

    biaoxiaoduan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<