Class ProtobufDecoder

All Implemented Interfaces:
ChannelHandler, ChannelInboundHandler

@Sharable public class ProtobufDecoder extends MessageToMessageDecoder<ByteBuf>
Decodes a received 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:
ChannelPipeline pipeline = ...;

// Decoders
pipeline.addLast("frameDecoder",
                 new LengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4));
pipeline.addLast("protobufDecoder",
                 new ProtobufDecoder(MyMessage.getDefaultInstance()));

// Encoder
pipeline.addLast("frameEncoder", new LengthFieldPrepender(4));
pipeline.addLast("protobufEncoder", new ProtobufEncoder());
and then you can use a 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);
}
  • Constructor Details

    • ProtobufDecoder

      public ProtobufDecoder(com.google.protobuf.MessageLite prototype)
      Creates a new instance.
    • ProtobufDecoder

      public ProtobufDecoder(com.google.protobuf.MessageLite prototype, com.google.protobuf.ExtensionRegistry extensionRegistry)
    • ProtobufDecoder

      public ProtobufDecoder(com.google.protobuf.MessageLite prototype, com.google.protobuf.ExtensionRegistryLite extensionRegistry)
  • Method Details