public abstract class MessageToMessageCodec<INBOUND_IN,OUTBOUND_IN> extends ChannelDuplexHandler
MessageToMessageDecoder和MessageToMessageEncoder的组合。
这里是一个MessageToMessageCodec的例子,它只是从Integer解码到Long并从Long编码为Integer 。
public class NumberCodec extends
MessageToMessageCodec<Integer, Long> {
@Override
public Long decode(ChannelHandlerContext ctx, Integer msg, List<Object> out)
throws 异常 {
out.add(msg.longValue());
}
@Override
public Integer encode(ChannelHandlerContext ctx, Long msg, List<Object> out)
throws 异常 {
out.add(msg.intValue());
}
}
请注意,如果消息是ReferenceCounted类型的消息,则需要调用ReferenceCounted.retain() 。
这是需要的,因为MessageToMessageCodec将在编码/解码消息上调用ReferenceCounted.release() 。
ChannelHandler.Sharable| Modifier | Constructor and Description |
|---|---|
protected |
MessageToMessageCodec()
创建一个新实例,该实例将尝试检测要解码的类型并将其编码为该类的类型参数。
|
protected |
MessageToMessageCodec(java.lang.Class<? extends INBOUND_IN> inboundMessageType, java.lang.Class<? extends OUTBOUND_IN> outboundMessageType)
创建一个新的实例。
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
acceptInboundMessage(java.lang.Object msg)
当且仅当指定的消息可以被此编解码器解码时返回
true 。
|
boolean |
acceptOutboundMessage(java.lang.Object msg)
当且仅当指定的消息可以由此编解码器编码时返回
true 。
|
void |
channelRead(ChannelHandlerContext ctx, java.lang.Object msg)
|
protected abstract void |
decode(ChannelHandlerContext ctx, INBOUND_IN msg, java.util.List<java.lang.Object> out) |
protected abstract void |
encode(ChannelHandlerContext ctx, OUTBOUND_IN msg, java.util.List<java.lang.Object> out) |
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
|
bind, close, connect, deregister, disconnect, flush, readchannelActive, channelInactive, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredensureNotSharable, handlerAdded, handlerRemoved, isSharableclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitexceptionCaught, handlerAdded, handlerRemovedprotected MessageToMessageCodec()
protected MessageToMessageCodec(java.lang.Class<? extends INBOUND_IN> inboundMessageType, java.lang.Class<? extends OUTBOUND_IN> outboundMessageType)
inboundMessageType - 要解码的消息类型
outboundMessageType - 要编码的消息类型
public void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRead(Object)转发到ChannelPipeline中的下一个ChannelInboundHandler 。
子类可以重写此方法来更改行为。
channelRead ,界面
ChannelInboundHandler
channelRead在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
ChannelDuplexHandler
ChannelOutboundInvoker.write(Object, ChannelPromise)转发到ChannelOutboundHandler中的下一个ChannelOutboundHandler 。
子类可以重写此方法来更改行为。
write在界面
ChannelOutboundHandler
write在课堂上
ChannelDuplexHandler
ctx - 为其写入操作的ChannelHandlerContext
msg - 写信息
promise - 操作完成后通知ChannelPromise
java.lang.Exception - 发生错误时抛出
public boolean acceptInboundMessage(java.lang.Object msg)
throws java.lang.Exception
true 。
msg - 消息
java.lang.Exception
public boolean acceptOutboundMessage(java.lang.Object msg)
throws java.lang.Exception
true 。
msg - 消息
java.lang.Exception
protected abstract void encode(ChannelHandlerContext ctx, OUTBOUND_IN msg, java.util.List<java.lang.Object> out) throws java.lang.Exception
java.lang.Exception
MessageToMessageEncoder.encode(ChannelHandlerContext, Object, List)
protected abstract void decode(ChannelHandlerContext ctx, INBOUND_IN msg, java.util.List<java.lang.Object> out) throws java.lang.Exception
java.lang.Exception
MessageToMessageDecoder.decode(ChannelHandlerContext, Object, List)
Copyright © 2008–2018 The Netty Project. All rights reserved.