Netty——Google Protobuf序列化协议
文章目录
一、编码与解码
1.1 概述
编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时需要编码,接收数据时需要解码。codec(编解码器) 由decoder(解码器)和 encoder(编码器)组成,encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据。
Netty本身的 ObjectDecoder 和 ObjectEncoder 可以用来实现 POJO 对象或各种业务对象的编码和解码,但是底层使用的仍是 Java 序列化技术 , 无法跨语言。
1.2 Protobuf序列化协议
Protocol Buffers是Google开发的一种数据描述语言,能够将结构化数据序列化,可用于数据存储、通信协议等方面。
Protobuf是用来将对象序列化的,类似 JSON 序列化,它是一种高效的结构化数据存储格式,可以用于结构化数据序列化,支持跨平台、跨语言。它很适合做数据存储或RPC(远程过程调用)数据交换格式。
Protocol Buffers是二进制格式,而JSON和XML是文本格式。相对于XML,Protocol Buffers体积小(消息大小只需要XML的1/10 ~ 1/3)、速度快(解析速度比XML快20 ~ 100倍)。
步骤:
-
在.proto文件中定义好实体及它们的属性;
-
再编译成java对象进行使用。
-
CMD界面使用–cpp_out、–java_out、–python_out命令选项可以生成C++、Java、Python代码。
1.2.1 Protobuf 格式
- Maven
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.6.1</version>
<