Class ExtraField
java.lang.Object
org.apache.commons.compress.compressors.gzip.ExtraField
- All Implemented Interfaces:
Iterable<ExtraField.SubField>
If the
FLG.FEXTRA bit is set, an "extra field" is present in the header, with total length XLEN bytes.
+---+---+=================================+ | XLEN |...XLEN bytes of "extra field"...| (more...) +---+---+=================================+This class represents the extra field payload (excluding the XLEN 2 bytes). The ExtraField payload 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. The class is iterable, but this iterator is immutable.
- Since:
- 1.28.0
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classIf theFLG.FEXTRAbit is set, an "extra field" is present in the header, with total length XLEN bytes. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate final List<ExtraField.SubField> private intprivate static final byte[] -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddSubField(String id, byte[] payload) Append a subfield by a 2-chars ISO-8859-1 string.voidclear()Removes all subfields from this instance.booleanFinds the first subfield that matched the id if found, null otherwise.(package private) static ExtraFieldfromBytes(byte[] bytes) intGets the size in bytes of the encoded extra field.getSubField(int index) Gets the subfield at the given index.inthashCode()booleanisEmpty()Tests is this extra field has no subfields.iterator()Returns an unmodifiable iterator over the elements in the SubField list in proper sequence.intsize()Gets the count of subfields currently in in this extra field.(package private) byte[]Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
MAX_SIZE
private static final int MAX_SIZE- See Also:
-
ZERO_BYTES
private static final byte[] ZERO_BYTES -
subFields
-
totalSize
private int totalSize
-
-
Constructor Details
-
ExtraField
public ExtraField()Constructs a new instance.
-
-
Method Details
-
fromBytes
- Throws:
IOException
-
addSubField
Append a subfield by a 2-chars ISO-8859-1 string. The char at index 0 and 1 are respectively si1 and si2 (subfield id 1 and 2).- Parameters:
id- The subfield ID.payload- The subfield payload.- Returns:
- this instance.
- Throws:
NullPointerException- ifidisnull.NullPointerException- ifpayloadisnull.IllegalArgumentException- if the subfield is not 2 characters or the payload is nullIOException- if appending this subfield would exceed the max size 65535 of the extra header.
-
clear
public void clear()Removes all subfields from this instance. -
equals
-
findFirstSubField
Finds the first subfield that matched the id if found, null otherwise.- Parameters:
id- The ID to find.- Returns:
- The first SubField that matched or null.
-
getEncodedSize
public int getEncodedSize()Gets the size in bytes of the encoded extra field. This does not include its own 16 bits size when embeded in the gzip header. For N sub fields, the total is all subfields payloads bytes + 4N.- Returns:
- the bytes count of this extra payload when encoded.
-
getSubField
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 < 0 || index >= size()).
-
hashCode
public int hashCode() -
isEmpty
public boolean isEmpty()Tests is this extra field has no subfields.- Returns:
- true if there are no subfields, false otherwise.
-
iterator
Returns an unmodifiable iterator over the elements in the SubField list in proper sequence.- Specified by:
iteratorin interfaceIterable<ExtraField.SubField>- Returns:
- an unmodifiable naturally ordered iterator over the SubField elements.
-
size
public int size()Gets the count of subfields currently in in this extra field.- Returns:
- the count of subfields contained in this instance.
-
toByteArray
byte[] toByteArray()
-