编码器与解码器
以ProtobufEncoder为例子,
ProtobufEncoder继承ChannelOutboundHandler,与我们自定义的出站处理器(OutboundHandler)相似。
出站时(即向Channel写数据),会调用这个Handler对数据进行处理(编码)。
同理,Decoder则继承ChannelInboundHandler,是一个入站处理器,当向Channel读数据时,会调用这个handler对数据进行处理,再将已经解码的数据传递给下一个handler。(这就是为什么要把自定义处理器放在最末尾)
Handler链
出站从Handler链的尾部执行到头部,而入站从头部执行到尾部。
如果发送的数据与预期的不同,那么编码器就不会处理。
public class MyLongToByteEncoder extends MessageToByteEncoder<Long> {
@Override
protected void encode(ChannelHandlerContext ctx, Long msg, ByteBuf out) throws Exception {
System.out.println("Long to Byte 被调用");
out.writeLong(msg);
}
}
如上是一个自定义的编码器,当写出类型不是泛型中指定的类型,那么编码器就不会执行。
if (