Class ByteArrayCodec

java.lang.Object
com.illumon.util.codec.ByteArrayCodec
All Implemented Interfaces:
ObjectCodec<byte[]>, ObjectDecoder<byte[]>

public class ByteArrayCodec
extends Object
implements ObjectCodec<byte[]>
ObjectCodec implementation for arrays of bytes. We support fixed and variable width encodings. Fixed width may or may not be nullable. Variable width is always nullable. Nullable is true by default and can be set by an optional 2nd argument to the codec. Non-nullable encoding of fixed size arrays saves one byte since we don't need a sentinel value to indicate null in that case.
  • Constructor Details

  • Method Details

    • isNullable

      public boolean isNullable()
      Description copied from interface: ObjectCodec
      Does this codec support encoding of null values?
      Specified by:
      isNullable in interface ObjectCodec<byte[]>
      Returns:
      if null values are supported
    • getPrecision

      public int getPrecision()
      Description copied from interface: ObjectCodec
      If applicable, the maximum encodable precision. If precision is not applicable (i.e. for non-numeric types) this method should return zero.
      Specified by:
      getPrecision in interface ObjectCodec<byte[]>
      Returns:
      the numeric precision supported by this codec
    • getScale

      public int getScale()
      Description copied from interface: ObjectCodec
      If applicable, the maximum encodable scale. If scale is not applicable (i.e. for non-numeric types) this method should return zero.
      Specified by:
      getScale in interface ObjectCodec<byte[]>
      Returns:
      the numeric scale (digits after the decimal point) supported by this codec
    • encode

      @NotNull public byte[] encode​(@Nullable byte[] input)
      Description copied from interface: ObjectCodec
      Encode the specified input as an array of bytes. Note that it is up to the implementation how to encode null inputs. The use of a zero-length byte array (e.g. CollectionUtil.ZERO_LENGTH_BYTE_ARRAY) is strongly encouraged.
      Specified by:
      encode in interface ObjectCodec<byte[]>
      Parameters:
      input - The input object, possibly null
      Returns:
      The output byte array
    • decode

      @Nullable public byte[] decode​(@NotNull byte[] input, int offset, int length)
      Description copied from interface: ObjectDecoder
      Decode an object from an array of bytes.
      Specified by:
      decode in interface ObjectDecoder<byte[]>
      Parameters:
      input - The input byte array containing bytes to decode
      offset - The offset into the byte array to start decoding from
      length - The length of the byte array to decode from, starting at the offset
      Returns:
      The output object, possibly null
    • expectedObjectWidth

      public int expectedObjectWidth()
      Description copied from interface: ObjectDecoder
      What width byte array does this ObjectCodec expect to encode and decode?
      Specified by:
      expectedObjectWidth in interface ObjectDecoder<byte[]>
      Returns:
      VARIABLE_WIDTH_SENTINEL if the codec must encode and decode variable width columns, otherwise the fixed size of byte array that must be decoded and encoded.