netty-protobuf 基本使用

netty-protobuf 基本使用

protobuf是什么

Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.

简单的来说,protobuf是一种可扩展的序列化数据结构,像xml,json一样,网络传输数据比较快

使用protobuf优点:

  • 跨语言
  • 编码后体积更小,有利于存储和传输
  • 编码性能高

window下安装protobuf

安装步骤:

  • 下载地址https://github.com/protocolbuffers/protobuf/releases
    在这里插入图片描述
  • 选择并下载: protoc-3.11.3-win64.zip,然后解压到某个目录
  • 加入环境变量,在解压目录到找到protoc.exe所有的目录,我这里是protobuf/bin,将这个路径加入到环境变量中
    在这里插入图片描述
  • 校验安装是否成功

打开cmd,输入protoc --version,如:

$ protoc --version
libprotoc 3.11.3

这样表示安装成功

小试持刀

在maven工程下的src/main/resources下新建文件SubscribeReq.proto:

syntax="proto3";

option java_package="com.chap8.protobuf.pbuf";
option java_outer_classname="SubscribeReqProto";

message SubscribeReq {
    int32 subReqID=1;
    string userName=2;
    string productName=3;
    string phoneNumber=4;
    string address=5;
}

然后在控制台下输入$ protoc --java_out=../java/ SubscribeReq.proto:

# 语法: protoc --java_out=文件输出目录 定义的.proto文件

$ protoc --java_out=../java/  SubscribeReq.proto

如果没有问题的话,可以在com.chap8.protobuf.pbuf看到SubscribeReqProto.java文件

测试
public class TestSubscribeRespProtoTest {


	private static byte[] encode(SubscribeReqProto.SubscribeReq req){
		return req.toByteArray();
	}

	private static SubscribeReqProto.SubscribeReq decode(byte[] body)
								throws InvalidProtocolBufferException {
		return SubscribeReqProto.SubscribeReq.parseFrom(body);
	}

	private static SubscribeReqProto.SubscribeReq createSubscribeReq(){
		SubscribeReqProto.SubscribeReq.Builder builder 
                            =  SubscribeReqProto.SubscribeReq.newBuilder();
		builder.setSubReqID(1);
		builder.setUserName("netty");
		builder.setProductName("netty definitive guide");
		List<String> addresses = new ArrayList<>();
		addresses.add("ShangHai");
		addresses.add("BeiJing");
		builder.addAllAddress(addresses);
		return builder.build();
	}

	public static void main(String[] args) throws InvalidProtocolBufferException {

		SubscribeReqProto.SubscribeReq req = createSubscribeReq();
		System.out.println("req before encode: " + req.toString());
		SubscribeReqProto.SubscribeReq req1 = decode(encode(req));
		System.out.println("req after decode: "+ req.toString());
		System.out.println("req1: "+ req1.toString());
		System.out.println("req1 assert equals req: --> "+ req1.equals(req));

	}
}
}

测试结果

req before encode: subReqID: 1
userName: "netty"
productName: "netty definitive guide"
address: "ShangHai"
address: "BeiJing"

req after decode: subReqID: 1
userName: "netty"
productName: "netty definitive guide"
address: "ShangHai"
address: "BeiJing"

req1: subReqID: 1
userName: "netty"
productName: "netty definitive guide"
address: "ShangHai"
address: "BeiJing"

req1 assert equals req: --> true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值