java.lang.Object
kala.compress.compressors.gzip.ExtraField
All Implemented Interfaces:
Iterable<ExtraField.SubField>

public class ExtraField extends Object implements Iterable<ExtraField.SubField>
If the FLG.FEXTRA bit is set, an "extra field" is present in the header, with total length XLEN bytes. It consists of a series of subfields, each of the form:
 +---+---+---+---+==================================+
 |SI1|SI2|  LEN  |... LEN bytes of subfield data ...|
 +---+---+---+---+==================================+
 
This class does not expose the internal subfields list to prevent adding subfields without total extra length validation. However a copy of the list is available.
Since:
1.28.0
See Also:
  • Field Details

    • MAX_SIZE

      private static final int MAX_SIZE
      See Also:
    • ZERO_BYTES

      private static final byte[] ZERO_BYTES
    • subFields

      private final List<ExtraField.SubField> subFields
    • totalSize

      private int totalSize
  • Constructor Details

    • ExtraField

      public ExtraField()
      Constructs a new instance.
  • Method Details

    • fromBytes

      static ExtraField fromBytes(byte[] bytes) throws IOException
      Throws:
      IOException
    • addSubField

      public ExtraField addSubField(String id, byte[] payload) throws IOException
      Append a subfield by a 2-chars ISO-8859-1 string. The char at index 0 and 1 are respectiovely si1 and si2 (subfield id 1 and 2).
      Parameters:
      id - The subfield ID.
      payload - The subfield payload.
      Returns:
      this instance.
      Throws:
      NullPointerException - if id is null.
      NullPointerException - if payload is null.
      IllegalArgumentException - if the subfield is not 2 characters or the payload is null
      IOException - if appending this subfield would exceed the max size 65535 of the extra header.
    • getSubFieldAt

      public ExtraField.SubField getSubFieldAt(int index)
      Gets the subfield at the given index.
      Parameters:
      index - index of the element to return
      Returns:
      the subfield at the specified position in this list
      Throws:
      IndexOutOfBoundsException - if the index is out of range (index &lt; 0 || index &gt;= size())
    • iterator

      public Iterator<ExtraField.SubField> iterator()
      Returns an iterator over the SubField elements in this extra field in proper sequence.
      Specified by:
      iterator in interface Iterable<ExtraField.SubField>
      Returns:
      an iterator over the SubField elements in this extra field in proper sequence.
    • toByteArray

      byte[] toByteArray()