12、Decoder解码器和Encoder编码器
decoder部分:
decoder解码器是将Byte解析成为List的Java pojo对象。所有netty中的解码器,都是Inbound入站处理器类型,
都直接或者间接实现了ChannelInboundHandler接口。
每个解码器都是一个InboundHander
decoder–>ByteToMessageDecoder解码器
该类是个抽象类,不可直接使用
它会将上一站传过来的ByteBuf中的数据进行解码,解码出一个List,然后迭代List 列表
逐个将Java POJO对象传入下一个Inbound入站处理器,
其中解码的方法 decoder是个抽象方法,由子类实现。
decoder–>ReplayingDecoder类
ReplayingDecoder 类是ByteToMessageDecoder的子类,作用:
- 在读取ByteBuf缓冲区的数据之前,需要检查缓冲区中是否有足够的字节
- 若ByteBuf中有足够的字节,则会正常读取,如果没有足够的字节,则会停止解码,会留着数据,等待下一次IO事件再读取。
ReplayingDecoder分包解码器:
在netty中进行字符串的传输,可以采用普通的Header-Content内容传输协议:
Header 部分放置字符串的长度,用int来描述
content部分用来放置字符串。
在实际的传输过程中,一个Header-content内容包,在发送端会被编码成为一个ByteBuf内容发送包,
当到达接收端后,可能被分成很多ByteBuf接收包,对于这个参差不齐的接收包,该解码器操作:1:解码出这个字符串的长度
2:校验ByteBuf缓冲区的字节长度等于头部的解析的字符串长度,才会读取ByteBuf缓冲区的字节。
不适用场景:
在数据解析逻辑复杂的应用场景,ReplayingDecoder在解析速度上相对较差
原因:在ByteBuf中的长度不够时,ReplayingDecoder会抛出一个ReplayError异常,这时,会把ByteBuf中的
读指针还原到之前所在的位置。然后等待下一次IO事件,再继续解析。这对CPU是一个较大的负担。
decoder–>MessageToMessageDecoder:
在上图中,出站类型是Object,那么在下一个Inbound节点的入站类型,就是Object,这时,就需要用到MessageToMessageDecoder,
入参需要明确。
netty开箱即用的内置解码器:
FixedLengthFrameDecoder(固定长度数据包解码器):
适用场景:每个数据包的长度都是固定的,例如:100个字节。
只要把这个解码器加入到流水线中,就会把入站的ByteBuf包解析成一个个长度为100的数据包,然后进入下个Inbound节点LineBaseFrameDecoder(行分割数据包解码器):
适用场景:每个ByteBuf数据包,适用换行符(或者回车换行符)作为数据包的边界分隔符。DelimiterBaseFrameDecoder(自定义分隔符数据包解码器):可以自定义分隔符。
LengthFieldBaseFrameDecoder(自定义长度数据包解码器):可以自定义长度(最为复杂)
Encoder:
Encoder是将Java POJO对象转化成最终的ByteBuf二进制类型。通过流水线写入到低层的Java通道。
在netty中,编码器是一个Outbound出站处理器。
编码器是将上一站输入的数据进行编码或者格式转化,传递到下一个ChannelOutBoundHander出站处理器
Encode 有MessageToByteEncoder编码器接口和MessageToMessageEncoder编码器接口
总结
在一个channelPipeline中有N个handler节点,每一个Hander都有入站(Inbound)和出站(Outbound) 出站操作
所以Decoder和Encoder是在相互配合使用的。
前面的都是Decoder和Encoder分开实现的。Netty通过继承ByteToMessageDecoder和MessageToByteEncoder或子类,
生成了一个新类型:Codec类型。同时具备解码和编码功能。
ByteToMessageCodec(继承方式):通过继承,将解码和编码结合,将前面的decoder和encoder方法放在同一个自定义类中。
本来放入channelPipeline中需要添加2个节点,现在添加1个节点即可。
CombinedChannelDuplexHander组合器(通过组合的方式):将编码器和解码器的所有的逻辑强制性的放在同一个类中,
在只需要编码和解码的流水线上,逻辑太臃肿,不大合适。这里将解码器和编码器结合起来使用,捆绑使用,更加的灵活。
12、Decoder解码器和Encoder编码器相关推荐
- 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- Pytorch:Transformer(Encoder编码器-Decoder解码器、多头注意力机制、多头自注意力机制、掩码张量、前馈全连接层、规范化层、子层连接结构、pyitcast) part1
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- 基于Seq2Seq的中文聊天机器人编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- 机器翻译 MXNet(使用含注意力机制的编码器—解码器,即 Encoder编码器-Decoder解码器框架 + Attention注意力机制)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
- Encoder编码器、Decoder解码器
知乎用户对编码器解码器的理解 Encoder: 本身其实就是一连串的卷积网络.该网络主要由卷积层,池化层和BatchNormalization层组成. 卷积层负责获取图像局域特征,池化层对图像进行下采 ...
- NVIDIA PureVideo Decoder解码器注册码
http://www.amznz.com/nvidia-purevideo-decoder/ 重装系统后当然得装终极解码来看高清电影,这次为了给喜欢看HD影片的朋友,特意奉上NVIDIA7以上显卡的N ...
- 【Pytorch项目实战】之生成式网络:编码器-解码器、自编码器AE、变分自编码器VAE、生成式对抗网络GAN
文章目录 博主精品专栏导航 生成式网络 - 生成合成图像 算法一:编码器-解码器 算法二:自编码器(Auto-Encoder,AE) 算法三:变分自编码器(Variational Auto Encod ...
- STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式
机器人开发过程中,对于直流电机来说,编码器至关重要,它不仅可以使我们对电极进行精确的速度闭环,位置闭环,还可以通过时间积分,根据运动学关系,获得速度.位置等信息 STM32的定时器有编码器模式,大大的 ...
- NLP-生成模型-2014:Seq2Seq【缺点:①解码器无法对齐编码器(Attention机制);②编码器端信息过使用或欠使用(Coverage机制);③解码器无法解决OOV(Pointer机制)】
<原始论文:Sequence to Sequence Learning with Neural Networks> Seq2Seq(多层LSTM-多层LSTM)+Attention架构是T ...
- 深度学习论文阅读:Generative Pre-Training(GPT)
文章目录 GPT Abstract 1 Introduction 6 Conclusion 2 Related Work 3 Framework 3.1 Unsupervised pre-traini ...
最新文章
- alt+shift+j,添加日期、作者等
- iOS获取webView的内容或修改网页上的内容
- [转]iOS为UILabel添加长按复制功能
- Java设计模式之行为型:解释器模式
- 【译文】领域模型的五个特征
- 面试 | 你说你熟悉MySql,那你就来谈谈InnoDB如何解决幻读的?
- java判断光标位置_Java如何知道光标的当前位置?
- 外卖点餐系统源码|餐饮点餐源码开发
- vscode下报错:No such file or directory fatal error:no input files的一种比较坑爹的可能
- Drill模块——孔加工与螺纹铣削
- java事务 深入Java事务的原理与应用
- buck斩波电路matlab,直流斩波电路的MATLAB建模与仿真.doc
- 梁宁《产品思维》之18用户体验
- 游戏制作人谈10大开发经验
- 键盘没有小键盘怎么办?怎么打开屏幕软键盘?
- 洛谷P3374 树状数组模版1
- halcon_halcon图像处理基本运算
- 几种常用的开发模型和测试模型
- 在字节跳动工作是一种怎样的体验?
- 行业解决方案|智慧检务:聚焦检察院工作数字化
热门文章
- 扔掉代码,程序员月薪达到了80000
- 仿小米通讯录 右侧滑动条与带动画的悬停列表实现(二)
- Ardunio开发实例-VCNL4010 接近度和环境光传感器
- 通过 BTC 联动程度判断牛熊
- 【JavaScript】 基础知识
- White自动化测试培训大纲
- 人生得意须尽善,人生失意亦无怨;人生一世,草木一秋,乐也,悲也,何乐而不为呢?...
- 地图上分成一块一块区域 高德地图_高德地图绘制区域边界线
- 2021-04-12——新特性Lambda表达式和Function函数式接口编程
- R语言字符串相关操作