netty(九)--编解码器

	编码器用于将消息转换为适合于传输的格式,解码器则是将网络字节流转换回应用程序的消息格式。

解码器

  • 将字节解码为消息–ByteToMessageDecoder和RelayingDecoder
  • 将消息解码为另一种消息–MessageToMessageDecoder
ByteToMessageDecoder
方法描述
decode(ChannelHandlerContext ctx,ByteBuf in,List< Object> out)这是你必须实现的唯一抽象方法,该方法被调用时将会传入一个包含了传入数据的ByteBuf ,以及一个用来添加解码消息的List。对这个方法的调用将会重复进行,直到确定没有新的元素被添加到该List,或者ByteBuf中没有更多可读取的字节时为止。然后如果List不为空,则将内容传递给ChannelPipeline中的下一个ChannelInboundHandler.
decodeLast(ChannelHandlerContext ctx,ByteBuf in,List< Object> out)默认实现只简单调用了decode方法,当channel变为非活动时,这个方法会被调用一次
ReplayingDecoder

ReplayingDecoder继承于ByteToMessageDecoder

  • ReplayingDecoder稍慢于ByteToMessageDecoder
  • ReplayingDecoderByteBuf不完全支持ByteBuf的所有操作

ReplayingDecoder在decode时,如果抛出Error,将在基类中捕获处理,当有更多消息可供读取时,decode方法将被再次调用。

MessageToMessageDecoder
方法描述
decode(ChannelHandlerContext ctx,I msg,List< Object> out对于每个需要被解码为另一种格式的入站消息来说,这个方法都会被调用。

编码器

MessageToByteEncoder
方法描述
encode(ChannelHandlerContext ctx,I msg,ByteBuf outencode方法是你唯一需要实现的抽象方法。接收传入消息msg,传出out。会传递给下一个ChannelOutboundHandler

在这里插入图片描述

MessageToMessageEncoder

将出站数据从一种消息编码为另一种。

方法描述
encode(ChannelHandlerContext ctx,I msg,List< Object> outencode方法是你唯一需要实现的抽象方法。每次write都会传递给encode方法,传出out,以编码为一个或多个出站消息。随后会传递给下一个ChannelOutboundHandler

ByteToMessageCodec
在这里插入图片描述

MessageToMessageCodec方法:

在这里插入图片描述


在一个handler中同时写编码和解码方法,不利于代码的重用。netty提供了CombinedChannelDuplexHandler类实现上述相同的功能。
声明如下:

public class CombinedChannelDuplexHandler
<I extends ChannelInboundHandler,
O extends ChannelOutboundHandler>

一种使用方式:

public class CombinedByteCharCodec extends
CombinedChannelDuplexHandler<ByteToCharDecoder, CharToByteEncoder> {
	public CombinedByteCharCodec() {
		super(new ByteToCharDecoder(), new CharToByteEncoder());
	}
}

待续。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值