@ChannelHandler.Sharable public class ProtobufDecoder extends MessageToMessageDecoder<ByteBuf>
ByteBuf
into a
Google Protocol Buffers
Message
and MessageLite
. Please note that this decoder must
be used with a proper ByteToMessageDecoder
such as ProtobufVarint32FrameDecoder
or LengthFieldBasedFrameDecoder
if you are using a stream-based
transport such as TCP/IP. A typical setup for TCP/IP would be:
and then you can use aChannelPipeline
pipeline = ...; // Decoders pipeline.addLast("frameDecoder", newLengthFieldBasedFrameDecoder
(1048576, 0, 4, 0, 4)); pipeline.addLast("protobufDecoder", newProtobufDecoder
(MyMessage.getDefaultInstance())); // Encoder pipeline.addLast("frameEncoder", newLengthFieldPrepender
(4)); pipeline.addLast("protobufEncoder", newProtobufEncoder
());
MyMessage
instead of a ByteBuf
as a message:
void channelRead(ChannelHandlerContext
ctx, Object msg) {
MyMessage req = (MyMessage) msg;
MyMessage res = MyMessage.newBuilder().setText(
"Did you say '" + req.getText() + "'?").build();
ch.write(res);
}
ChannelHandler.Sharable
构造器和说明 |
---|
ProtobufDecoder(MessageLite prototype)
Creates a new instance.
|
ProtobufDecoder(MessageLite prototype,
ExtensionRegistry extensionRegistry) |
ProtobufDecoder(MessageLite prototype,
ExtensionRegistryLite extensionRegistry) |
限定符和类型 | 方法和说明 |
---|---|
protected void |
decode(ChannelHandlerContext ctx,
ByteBuf msg,
java.util.List<java.lang.Object> out)
Decode from one message to an other.
|
acceptInboundMessage, channelRead
channelActive, channelInactive, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
handlerAdded, handlerRemoved
public ProtobufDecoder(MessageLite prototype)
public ProtobufDecoder(MessageLite prototype, ExtensionRegistry extensionRegistry)
public ProtobufDecoder(MessageLite prototype, ExtensionRegistryLite extensionRegistry)
protected void decode(ChannelHandlerContext ctx, ByteBuf msg, java.util.List<java.lang.Object> out) throws java.lang.Exception
MessageToMessageDecoder
decode
在类中 MessageToMessageDecoder<ByteBuf>
ctx
- the ChannelHandlerContext
which this MessageToMessageDecoder
belongs tomsg
- the message to decode to an other oneout
- the List
to which decoded messages should be addedjava.lang.Exception
- is thrown if an error occurs