摘要:學習筆記簡介是發明的一種數據交換格式,獨立于語言,獨立于平臺。此包可以對消息進行序列化和反序列化。端已經接收到消息。至此中使用的實例就完成了。參考官方文檔中使用
Protocol Buffers學習筆記 1. 簡介
Protocol Buffers是google發明的一種數據交換格式,獨立于語言,獨立于平臺。與其他的數據交換格式有所不同,Protocol Buffers是一種二進制的格式,因此在網絡傳輸的時候效率更高,相對于json它的文件體積更小,相對于xml,它的解析速度更快。
作為一種效率和兼容性都很優秀的二進制數據傳輸格式,可以用于網絡傳輸、配置文件、數據存儲等領域。
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...
一般在每個發布版本的protoc-{版本號}-{平臺}.zip壓縮包里面包含對應的編譯器。由于LZ用的是win系統,故下載了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.java2.3 在項目中使用編譯好的java文件
新建一個java工程,目錄結構如下:
com ├─example │ └─tutorial │ AddressBookProtos.java │ └─wangjun └─protoc Client.java Constants.java Server.java
導入protobuf-java-3.5.1.jar(LZ使用的是此版本,讀者請自行下載適用版本)。此包可以對ProtocolBuffer消息進行序列化和反序列化。
編寫實例代碼:
1)Constants.javapackage 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); //構造一個Person對象 AddressBookProtos.Person person = AddressBookProtos.Person.newBuilder().setName("zhangsan") .setId(20).setEmail("zhangsan@xxxmail.com").build(); OutputStream os = socket.getOutputStream(); //將Person對象寫到輸出流中 os.write(person.toByteArray()); os.flush(); //這里注意一定要關閉流,否則服務端會報錯 os.close(); System.out.println("client send person"); } }2.4 測試
先運行server。
server started...
再運行client。
client send person
server端已經接收到消息。
server started... a client connected! server received data: name: "zhangsan" id: 20 email: "zhangsan@xxxmail.com"
至此java中使用ProtocolBuffer的實例就完成了。
參考:
官方文檔 https://developers.google.com...Java中使用Protocol Buffer https://blog.csdn.net/yubo_72...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76573.html
摘要:我們知道是定義的一種跨語言跨平臺可擴展的數據傳輸及存儲的協議,因為將字段協議分別放在傳輸兩端,傳輸數據中只包含數據本身,不需要包含字段說明,所以傳輸數據量小,解析效率高。官方只支持,如果想在中使用,需要借助于第三方的擴展,使用方法如下。 我們知道Protocol Buffers是Google定義的一種跨語言、跨平臺、可擴展的數據傳輸及存儲的協議,因為將字段協議分別放在傳輸兩端,傳輸數據...
摘要:簡介是谷歌出品的跨平臺跨語言可擴展的數據傳輸及存儲的協議,是高效的數據壓縮編碼方式之一。相比于來說,更加小巧,更加快速,更加簡單。此外,由于其在內網高效的數據交換效率,是被廣泛應用于微服務的,在谷歌的開源框架即是基于此構建起來的。 Protobuf 簡介 protobuf(Protocol buffers)是谷歌出品的跨平臺、跨語言、可擴展的數據傳輸及存儲的協議,是高效的數據壓縮編碼方...
閱讀 1124·2021-10-09 09:43
閱讀 18551·2021-09-22 15:52
閱讀 1063·2019-08-30 15:44
閱讀 3056·2019-08-30 15:44
閱讀 3248·2019-08-26 14:07
閱讀 910·2019-08-26 13:55
閱讀 2570·2019-08-26 13:41
閱讀 3092·2019-08-26 13:29