org.apache.commons.compress.archivers.zip

## Class ExtraFieldUtils

- java.lang.Object
- - org.apache.commons.compress.archivers.zip.ExtraFieldUtils

-     public class ExtraFieldUtils
      extends Object

  ZipExtraField related methods
  This class is not thread-safe
    because the HashMap is not synch.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `ExtraFieldUtils.UnparseableExtraField` "enum" for the possible actions to take if the extra field cannot be parsed.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ExtraFieldUtils()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static ZipExtraField` | `createExtraField(ZipShort headerId)` Create an instance of the appropriate ExtraField, falls back to `UnrecognizedExtraField`.
    `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(Class<?> c)` Register a ZipExtraField implementation.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ExtraFieldUtils

          public ExtraFieldUtils()

  - ### Method Detail

    - #### register

          public static void register(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 InstantiationException,
                                                       IllegalAccessException

      Create an instance of the appropriate ExtraField, falls back to `UnrecognizedExtraField`.
      Parameters:
        `headerId` - the header identifier
      Returns:
        an instance of the appropriate ExtraField
      Throws:
        `InstantiationException` - if unable to instantiate the class
        `IllegalAccessException` - if not allowed to instantiate the class

    - #### createExtraFieldNoDefault

          public static ZipExtraField createExtraFieldNoDefault(ZipShort headerId)
                                                         throws InstantiationException,
                                                                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:
        `InstantiationException` - if unable to instantiate the class
        `IllegalAccessException` - if not allowed to instantiate the class
      Since:
        1.19

    - #### parse

          public static ZipExtraField[] parse(byte[] data)
                                       throws 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:
        `ZipException` - on error

    - #### parse

          public static ZipExtraField[] parse(byte[] data,
                                              boolean local)
                                       throws 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 bytes
        `local` - whether data originates from the local file data or the central directory
      Returns:
        an array of ExtraFields
      Throws:
        `ZipException` - on error

    - #### parse

          public static ZipExtraField[] parse(byte[] data,
                                              boolean local,
                                              ExtraFieldUtils.UnparseableExtraField onUnparseableData)
                                       throws ZipException

      Split the array into ExtraFields and populate them with the given data.
      Parameters:
        `data` - an array of bytes
        `local` - whether data originates from the local file data or the central directory
        `onUnparseableData` - what to do if the extra field data cannot be parsed.
      Returns:
        an array of ExtraFields
      Throws:
        `ZipException` - on error
      Since:
        1.1

    - #### parse

          public static ZipExtraField[] parse(byte[] data,
                                              boolean local,
                                              ExtraFieldParsingBehavior parsingBehavior)
                                       throws ZipException

      Split the array into ExtraFields and populate them with the given data.
      Parameters:
        `data` - an array of bytes
        `parsingBehavior` - controls parsing of extra fields.
        `local` - whether data originates from the local file data or the central directory
      Returns:
        an array of ExtraFields
      Throws:
        `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 ZipException

      Fills in the extra field data into the given instance.

      Calls `ZipExtraField.parseFromCentralDirectoryData(byte[], int, int)` or `ZipExtraField.parseFromLocalFileData(byte[], int, int)` internally and wraps any `ArrayIndexOutOfBoundsException` thrown into a `ZipException`.

      Parameters:
        `ze` - the extra field instance to fill
        `data` - the array of extra field data
        `off` - offset into data where this field's data starts
        `len` - the length of this field's data
        `local` - 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:
        `ZipException` - if an error occurs
      Since:
        1.19

Copyright © 2002–2020 The Apache Software Foundation. All rights reserved.