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, 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
- 要解码的消息类型
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.