Class ExtraFieldUtils
- java.lang.Object
-
- org.apache.commons.compress.archivers.zip.ExtraFieldUtils
-
public class ExtraFieldUtils extends java.lang.Object
ZipExtraField related methods
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ExtraFieldUtils.UnparseableExtraField
"enum" for the possible actions to take if the extra field cannot be parsed.
-
Constructor Summary
Constructors Constructor Description ExtraFieldUtils()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static ZipExtraField
createExtraField(ZipShort headerId)
Create an instance of the appropriate ExtraField, falls back toUnrecognizedExtraField
.static ZipExtraField
createExtraFieldNoDefault(ZipShort headerId)
Create an instance of the appropriate ExtraField.static ZipExtraField
fillExtraField(ZipExtraField ze, byte[] data, int off, int len, boolean local)
Fills in the extra field data into the given instance.static byte[]
mergeCentralDirectoryData(ZipExtraField[] data)
Merges the central directory fields of the given ZipExtraFields.static byte[]
mergeLocalFileDataData(ZipExtraField[] data)
Merges the local file data fields of the given ZipExtraFields.static ZipExtraField[]
parse(byte[] data)
Split the array into ExtraFields and populate them with the given data as local file data, throwing an exception if the data cannot be parsed.static ZipExtraField[]
parse(byte[] data, boolean local)
Split the array into ExtraFields and populate them with the given data, throwing an exception if the data cannot be parsed.static ZipExtraField[]
parse(byte[] data, boolean local, ExtraFieldParsingBehavior parsingBehavior)
Split the array into ExtraFields and populate them with the given data.static ZipExtraField[]
parse(byte[] data, boolean local, ExtraFieldUtils.UnparseableExtraField onUnparseableData)
Split the array into ExtraFields and populate them with the given data.static void
register(java.lang.Class<?> c)
Register a ZipExtraField implementation.
-
-
-
Method Detail
-
register
public static void register(java.lang.Class<?> c)
Register a ZipExtraField implementation.The given class must have a no-arg constructor and implement the
ZipExtraField interface
.- Parameters:
c
- the class to register
-
createExtraField
public static ZipExtraField createExtraField(ZipShort headerId) throws java.lang.InstantiationException, java.lang.IllegalAccessException
Create an instance of the appropriate ExtraField, falls back toUnrecognizedExtraField
.- Parameters:
headerId
- the header identifier- Returns:
- an instance of the appropriate ExtraField
- Throws:
java.lang.InstantiationException
- if unable to instantiate the classjava.lang.IllegalAccessException
- if not allowed to instantiate the class
-
createExtraFieldNoDefault
public static ZipExtraField createExtraFieldNoDefault(ZipShort headerId) throws java.lang.InstantiationException, java.lang.IllegalAccessException
Create an instance of the appropriate ExtraField.- Parameters:
headerId
- the header identifier- Returns:
- an instance of the appropriate ExtraField or null if the id is not supported
- Throws:
java.lang.InstantiationException
- if unable to instantiate the classjava.lang.IllegalAccessException
- if not allowed to instantiate the class- Since:
- 1.19
-
parse
public static ZipExtraField[] parse(byte[] data) throws java.util.zip.ZipException
Split the array into ExtraFields and populate them with the given data as local file data, throwing an exception if the data cannot be parsed.- Parameters:
data
- an array of bytes as it appears in local file data- Returns:
- an array of ExtraFields
- Throws:
java.util.zip.ZipException
- on error
-
parse
public static ZipExtraField[] parse(byte[] data, boolean local) throws java.util.zip.ZipException
Split the array into ExtraFields and populate them with the given data, throwing an exception if the data cannot be parsed.- Parameters:
data
- an array of byteslocal
- whether data originates from the local file data or the central directory- Returns:
- an array of ExtraFields
- Throws:
java.util.zip.ZipException
- on error
-
parse
public static ZipExtraField[] parse(byte[] data, boolean local, ExtraFieldUtils.UnparseableExtraField onUnparseableData) throws java.util.zip.ZipException
Split the array into ExtraFields and populate them with the given data.- Parameters:
data
- an array of byteslocal
- whether data originates from the local file data or the central directoryonUnparseableData
- what to do if the extra field data cannot be parsed.- Returns:
- an array of ExtraFields
- Throws:
java.util.zip.ZipException
- on error- Since:
- 1.1
-
parse
public static ZipExtraField[] parse(byte[] data, boolean local, ExtraFieldParsingBehavior parsingBehavior) throws java.util.zip.ZipException
Split the array into ExtraFields and populate them with the given data.- Parameters:
data
- an array of bytesparsingBehavior
- controls parsing of extra fields.local
- whether data originates from the local file data or the central directory- Returns:
- an array of ExtraFields
- Throws:
java.util.zip.ZipException
- on error- Since:
- 1.19
-
mergeLocalFileDataData
public static byte[] mergeLocalFileDataData(ZipExtraField[] data)
Merges the local file data fields of the given ZipExtraFields.- Parameters:
data
- an array of ExtraFiles- Returns:
- an array of bytes
-
mergeCentralDirectoryData
public static byte[] mergeCentralDirectoryData(ZipExtraField[] data)
Merges the central directory fields of the given ZipExtraFields.- Parameters:
data
- an array of ExtraFields- Returns:
- an array of bytes
-
fillExtraField
public static ZipExtraField fillExtraField(ZipExtraField ze, byte[] data, int off, int len, boolean local) throws java.util.zip.ZipException
Fills in the extra field data into the given instance.Calls
ZipExtraField.parseFromCentralDirectoryData(byte[], int, int)
orZipExtraField.parseFromLocalFileData(byte[], int, int)
internally and wraps anyArrayIndexOutOfBoundsException
thrown into aZipException
.- Parameters:
ze
- the extra field instance to filldata
- the array of extra field dataoff
- offset into data where this field's data startslen
- the length of this field's datalocal
- whether the extra field data stems from the local file header. If this is false then the data is part if the central directory header extra data.- Returns:
- the filled field, will never be
null
- Throws:
java.util.zip.ZipException
- if an error occurs- Since:
- 1.19
-
-