public abstract class MessageToMessageCodec<INBOUND_IN,OUTBOUND_IN> extends ChannelDuplexHandler
MessageToMessageDecoder
and MessageToMessageEncoder
.
Here is an example of a MessageToMessageCodec
which just decode from Integer
to Long
and encode from Long
to Integer
.
public class NumberCodec extendsBe aware that you need to callMessageToMessageCodec
<Integer
,Long
> {@Override
publicLong
decode(ChannelHandlerContext
ctx,Integer
msg, List<Object> out) throwsException
{ out.add(msg.longValue()); }@Override
publicInteger
encode(ChannelHandlerContext
ctx,Long
msg, List<Object> out) throwsException
{ out.add(msg.intValue()); } }
ReferenceCounted.retain()
on messages that are just passed through if they
are of type ReferenceCounted
. This is needed as the MessageToMessageCodec
will call
ReferenceCounted.release()
on encoded / decoded messages.ChannelHandler.Sharable
限定符 | 构造器和说明 |
---|---|
protected |
MessageToMessageCodec()
Create a new instance which will try to detect the types to decode and encode out of the type parameter
of the class.
|
protected |
MessageToMessageCodec(java.lang.Class<? extends INBOUND_IN> inboundMessageType,
java.lang.Class<? extends OUTBOUND_IN> outboundMessageType)
Create a new instance.
|
限定符和类型 | 方法和说明 |
---|---|
boolean |
acceptInboundMessage(java.lang.Object msg)
Returns
true if and only if the specified message can be decoded by this codec. |
boolean |
acceptOutboundMessage(java.lang.Object msg)
Returns
true if and only if the specified message can be encoded by this codec. |
void |
channelRead(ChannelHandlerContext ctx,
java.lang.Object msg)
Calls
ChannelHandlerContext.fireChannelRead(Object) to forward
to the next ChannelInboundHandler in the ChannelPipeline . |
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)
Calls
ChannelOutboundInvoker.write(Object, ChannelPromise) to forward
to the next ChannelOutboundHandler in the ChannelPipeline . |
bind, close, connect, deregister, disconnect, flush, read
channelActive, channelInactive, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
exceptionCaught, handlerAdded, handlerRemoved
protected MessageToMessageCodec()
protected MessageToMessageCodec(java.lang.Class<? extends INBOUND_IN> inboundMessageType, java.lang.Class<? extends OUTBOUND_IN> outboundMessageType)
inboundMessageType
- The type of messages to decodeoutboundMessageType
- The type of messages to encodepublic void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRead(Object)
to forward
to the next ChannelInboundHandler
in the ChannelPipeline
.
Sub-classes may override this method to change behavior.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)
to forward
to the next ChannelOutboundHandler
in the ChannelPipeline
.
Sub-classes may override this method to change behavior.write
在接口中 ChannelOutboundHandler
write
在类中 ChannelDuplexHandler
ctx
- the ChannelHandlerContext
for which the write operation is mademsg
- the message to writepromise
- the ChannelPromise
to notify once the operation completesjava.lang.Exception
- thrown if an error occurspublic boolean acceptInboundMessage(java.lang.Object msg) throws java.lang.Exception
true
if and only if the specified message can be decoded by this codec.msg
- the messagejava.lang.Exception
public boolean acceptOutboundMessage(java.lang.Object msg) throws java.lang.Exception
true
if and only if the specified message can be encoded by this codec.msg
- the messagejava.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)