Class LengthFieldPrepender

All Implemented Interfaces:
ChannelHandler, ChannelOutboundHandler

@Sharable public class LengthFieldPrepender extends MessageToMessageEncoder<ByteBuf>
An encoder that prepends the length of the message. The length value is prepended as a binary form.

For example, LengthFieldPrepender(2) will encode the following 12-bytes string:

+----------------+
| "HELLO, WORLD" |
+----------------+
into the following:
+--------+----------------+
+ 0x000C | "HELLO, WORLD" |
+--------+----------------+
If you turned on the lengthIncludesLengthFieldLength flag in the constructor, the encoded data would look like the following (12 (original data) + 2 (prepended data) = 14 (0xE)):
+--------+----------------+
+ 0x000E | "HELLO, WORLD" |
+--------+----------------+
  • Field Details

    • byteOrder

      private final java.nio.ByteOrder byteOrder
    • lengthFieldLength

      private final int lengthFieldLength
    • lengthIncludesLengthFieldLength

      private final boolean lengthIncludesLengthFieldLength
    • lengthAdjustment

      private final int lengthAdjustment
  • Constructor Details

    • LengthFieldPrepender

      public LengthFieldPrepender(int lengthFieldLength)
      Creates a new instance.
      Parameters:
      lengthFieldLength - the length of the prepended length field. Only 1, 2, 3, 4, and 8 are allowed.
      Throws:
      java.lang.IllegalArgumentException - if lengthFieldLength is not 1, 2, 3, 4, or 8
    • LengthFieldPrepender

      public LengthFieldPrepender(int lengthFieldLength, boolean lengthIncludesLengthFieldLength)
      Creates a new instance.
      Parameters:
      lengthFieldLength - the length of the prepended length field. Only 1, 2, 3, 4, and 8 are allowed.
      lengthIncludesLengthFieldLength - if true, the length of the prepended length field is added to the value of the prepended length field.
      Throws:
      java.lang.IllegalArgumentException - if lengthFieldLength is not 1, 2, 3, 4, or 8
    • LengthFieldPrepender

      public LengthFieldPrepender(int lengthFieldLength, int lengthAdjustment)
      Creates a new instance.
      Parameters:
      lengthFieldLength - the length of the prepended length field. Only 1, 2, 3, 4, and 8 are allowed.
      lengthAdjustment - the compensation value to add to the value of the length field
      Throws:
      java.lang.IllegalArgumentException - if lengthFieldLength is not 1, 2, 3, 4, or 8
    • LengthFieldPrepender

      public LengthFieldPrepender(int lengthFieldLength, int lengthAdjustment, boolean lengthIncludesLengthFieldLength)
      Creates a new instance.
      Parameters:
      lengthFieldLength - the length of the prepended length field. Only 1, 2, 3, 4, and 8 are allowed.
      lengthAdjustment - the compensation value to add to the value of the length field
      lengthIncludesLengthFieldLength - if true, the length of the prepended length field is added to the value of the prepended length field.
      Throws:
      java.lang.IllegalArgumentException - if lengthFieldLength is not 1, 2, 3, 4, or 8
    • LengthFieldPrepender

      public LengthFieldPrepender(java.nio.ByteOrder byteOrder, int lengthFieldLength, int lengthAdjustment, boolean lengthIncludesLengthFieldLength)
      Creates a new instance.
      Parameters:
      byteOrder - the ByteOrder of the length field
      lengthFieldLength - the length of the prepended length field. Only 1, 2, 3, 4, and 8 are allowed.
      lengthAdjustment - the compensation value to add to the value of the length field
      lengthIncludesLengthFieldLength - if true, the length of the prepended length field is added to the value of the prepended length field.
      Throws:
      java.lang.IllegalArgumentException - if lengthFieldLength is not 1, 2, 3, 4, or 8
  • Method Details

    • encode

      protected void encode(ChannelHandlerContext ctx, ByteBuf msg, java.util.List<java.lang.Object> out) throws java.lang.Exception
      Description copied from class: MessageToMessageEncoder
      Encode from one message to an other. This method will be called for each written message that can be handled by this encoder.
      Specified by:
      encode in class MessageToMessageEncoder<ByteBuf>
      Parameters:
      ctx - the ChannelHandlerContext which this MessageToMessageEncoder belongs to
      msg - the message to encode to an other one
      out - the List into which the encoded msg should be added needs to do some kind of aggregation
      Throws:
      java.lang.Exception - is thrown if an error occurs