protobuf

一、概述

我们在编写网络应用程序的时候需要注意codec(编解码器),因为数据在网络中传输的都是二进制字节码数据,而我们拿到的目标数据往往不是字节码数据。因此在发送数据时就需要编码,接收数据时就需要解码。
在这里插入图片描述
codecd的组成部分有两个:decoder(解码器)和encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder负责把字节码数据转换成业务数据。
其实Java的序列化技术就可以作为codec去使用,但是他硬伤太多了:

  1. 无法跨语言
  2. 序列化后体积太大了,是二进制编码的5倍。
  3. 性能低

由于Java序列化技术硬伤太多,所以netty自身提供了一些codec:
netty提供的解码器:

  1. StringDecoder,对字符串数据进行解码。
  2. ObjectDecoder,对Java对象进行解码。

netty提供的编码器:

  1. StringEncoder,对字符串数据进行编码。
  2. ObjectEncoder,对Java对象进行编码。

netty本身自带的ObjectDecoder和ObjectEncoder可以实现pojo对象或各种业务对象的编码和解码。但是其内部任然是使用Java序列化技术
所有我们不建议使用。那么我们就需要更高级的编解码器。

二、Protobuf

protobuf 是Google发布的开源项目,全称Google protocol buffers ,特点如下:

  1. 支持跨平台、多语言(支持绝对多数语言,Java 、c++、c#、python等)
  2. 高性能、高可靠性
  3. 使用protobuf 编译器能自动生成代码,protobuf 是将类的定义换成 .proto 文件进行描述,然后通过protoc.exe 编译器 编译成 .java文件

目前使用netty开发的时候,经常使用protobuf作为codec (编解码器)

        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.6.1</version>
        </dependency>

2.1 如何使用protobuf

第一步先编写.proto文件
在这里插入图片描述
第二步
下载protoc编译器
下载地址

第三步:
解压后,打开bin目录,可以把我们写好的Book.proto文件复制到这个路径下,方便操作
在这里插入图片描述
执行命令:protoc --java_out=. Book.proto
说下这里的 .(点) 就表示当前路径,如果你的文件在其他位置就写文件的绝对路径。.(点)和文件名之间要加空格
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值