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 class
If theFLG.FEXTRA
bit is set, an "extra field" is present in the header, with total length XLEN bytes. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddSubField
(String id, byte[] payload) Append a subfield by a 2-chars ISO-8859-1 string.void
clear()
Removes all subfields from this instance.boolean
Finds the first subfield that matched the id if found, null otherwise.int
Gets the size in bytes of the encoded extra field.getSubField
(int index) Gets the subfield at the given index.int
hashCode()
boolean
isEmpty()
Tests is this extra field has no subfields.iterator()
Returns an unmodifiable iterator over the elements in the SubField list in proper sequence.int
size()
Gets the count of subfields currently in in this extra field.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
ExtraField
public ExtraField()Constructs a new instance.
-
-
Method Details
-
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
- ifid
isnull
.NullPointerException
- ifpayload
isnull
.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
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
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
-
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:
iterator
in interfaceIterable<ExtraField.SubField>
- Returns:
- an unmodifiable naturally ordered iterator over the SubField elements.
-
size
Gets the count of subfields currently in in this extra field.- Returns:
- the count of subfields contained in this instance.
-