第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

標(biāo)簽:
Java

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/protobuf/releases

一般在每个发布版本的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:\Users\wangjun\Downloads>protoc -I=./ --java_out=./ ./test.proto

编译成功后会在当前目录下生成对用的java文件:

C:\Users\wangjun\Downloads\com\example\tutorial\AddressBookProtos.java

2.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.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:\n" + 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: 20email: "zhangsan@xxxmail.com"



作者:王小冬
链接:https://www.jianshu.com/p/26165709a3d4


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消