Package org.apache.commons.compress.archivers.zip

# Class Zip64ExtendedInformationExtraField

java.lang.Object
org.apache.commons.compress.archivers.zip.Zip64ExtendedInformationExtraField

All Implemented Interfaces:
  `ZipExtraField`

public class Zip64ExtendedInformationExtraField extends Object implements ZipExtraField
Holds size and other extended information for entries that use Zip64 features.

Currently Commons Compress doesn't support encrypting the central directory so the note in APPNOTE.TXT about masking doesn't apply.

The implementation relies on data being read from the local file header and assumes that both size values are always present.

Since:
  1.2
See Also:
  - PKWARE APPNOTE.TXT, section 4.5.3
This class is not thread-safe

- ## Field Summary

  ### Fields inherited from interface org.apache.commons.compress.archivers.zip.ZipExtraField

  `EXTRAFIELD_HEADER_SIZE`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Zip64ExtendedInformationExtraField()`
  This constructor should only be used by the code that reads archives inside of Commons Compress.
  `Zip64ExtendedInformationExtraField(ZipEightByteInteger size, ZipEightByteInteger compressedSize)`
  Creates an extra field based on the original and compressed size.
  `Zip64ExtendedInformationExtraField(ZipEightByteInteger size, ZipEightByteInteger compressedSize, ZipEightByteInteger relativeHeaderOffset, ZipLong diskStart)`
  Creates an extra field based on all four possible values.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `byte[]`
  `getCentralDirectoryData()`
  The actual data to put into central directory - without Header-ID or length specifier.
  `ZipShort`
  `getCentralDirectoryLength()`
  Length of the extra field in the central directory - without Header-ID or length specifier.
  `ZipEightByteInteger`
  `getCompressedSize()`
  The compressed size stored in this extra field.
  `ZipLong`
  `getDiskStartNumber()`
  The disk start number stored in this extra field.
  `ZipShort`
  `getHeaderId()`
  The Header-ID.
  `byte[]`
  `getLocalFileDataData()`
  The actual data to put into local file data - without Header-ID or length specifier.
  `ZipShort`
  `getLocalFileDataLength()`
  Length of the extra field in the local file data - without Header-ID or length specifier.
  `ZipEightByteInteger`
  `getRelativeHeaderOffset()`
  The relative header offset stored in this extra field.
  `ZipEightByteInteger`
  `getSize()`
  The uncompressed size stored in this extra field.
  `void`
  `parseFromCentralDirectoryData(byte[] buffer, int offset, int length)`
  Populate data from this array as if it was in central directory data.
  `void`
  `parseFromLocalFileData(byte[] buffer, int offset, int length)`
  Populate data from this array as if it was in local file data.
  `void`
  `reparseCentralDirectoryData(boolean hasUncompressedSize, boolean hasCompressedSize, boolean hasRelativeHeaderOffset, boolean hasDiskStart)`
  Parses the raw bytes read from the central directory extra field with knowledge which fields are expected to be there.
  `void`
  `setCompressedSize(ZipEightByteInteger compressedSize)`
  The uncompressed size stored in this extra field.
  `void`
  `setDiskStartNumber(ZipLong ds)`
  The disk start number stored in this extra field.
  `void`
  `setRelativeHeaderOffset(ZipEightByteInteger rho)`
  The relative header offset stored in this extra field.
  `void`
  `setSize(ZipEightByteInteger size)`
  The uncompressed size stored in this extra field.

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

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

- ## Constructor Details

  - ### Zip64ExtendedInformationExtraField

    public Zip64ExtendedInformationExtraField()
    This constructor should only be used by the code that reads archives inside of Commons Compress.

  - ### Zip64ExtendedInformationExtraField

    public Zip64ExtendedInformationExtraField(ZipEightByteInteger size, ZipEightByteInteger compressedSize)
    Creates an extra field based on the original and compressed size.
    Parameters:
      `size` - the entry's original size
      `compressedSize` - the entry's compressed size
    Throws:
      `IllegalArgumentException` - if size or compressedSize is null

  - ### Zip64ExtendedInformationExtraField

    public Zip64ExtendedInformationExtraField(ZipEightByteInteger size, ZipEightByteInteger compressedSize, ZipEightByteInteger relativeHeaderOffset, ZipLong diskStart)
    Creates an extra field based on all four possible values.
    Parameters:
      `size` - the entry's original size
      `compressedSize` - the entry's compressed size
      `relativeHeaderOffset` - the entry's offset
      `diskStart` - the disk start
    Throws:
      `IllegalArgumentException` - if size or compressedSize is null

- ## Method Details

  - ### getCentralDirectoryData

    public byte[] getCentralDirectoryData()
    Description copied from interface: `ZipExtraField`
    The actual data to put into central directory - without Header-ID or length specifier.
    Specified by:
      `getCentralDirectoryData` in interface `ZipExtraField`
    Returns:
      the data

  - ### getCentralDirectoryLength

    public ZipShort getCentralDirectoryLength()
    Description copied from interface: `ZipExtraField`
    Length of the extra field in the central directory - without Header-ID or length specifier.
    Specified by:
      `getCentralDirectoryLength` in interface `ZipExtraField`
    Returns:
      the length of the field in the central directory

  - ### getCompressedSize

    public ZipEightByteInteger getCompressedSize()
    The compressed size stored in this extra field.
    Returns:
      The compressed size stored in this extra field.

  - ### getDiskStartNumber

    public ZipLong getDiskStartNumber()
    The disk start number stored in this extra field.
    Returns:
      The disk start number stored in this extra field.

  - ### getHeaderId

    public ZipShort getHeaderId()
    Description copied from interface: `ZipExtraField`
    The Header-ID.
    Specified by:
      `getHeaderId` in interface `ZipExtraField`
    Returns:
      The HeaderId value

  - ### getLocalFileDataData

    public byte[] getLocalFileDataData()
    Description copied from interface: `ZipExtraField`
    The actual data to put into local file data - without Header-ID or length specifier.
    Specified by:
      `getLocalFileDataData` in interface `ZipExtraField`
    Returns:
      the data

  - ### getLocalFileDataLength

    public ZipShort getLocalFileDataLength()
    Description copied from interface: `ZipExtraField`
    Length of the extra field in the local file data - without Header-ID or length specifier.
    Specified by:
      `getLocalFileDataLength` in interface `ZipExtraField`
    Returns:
      the length of the field in the local file data

  - ### getRelativeHeaderOffset

    public ZipEightByteInteger getRelativeHeaderOffset()
    The relative header offset stored in this extra field.
    Returns:
      The relative header offset stored in this extra field.

  - ### getSize

    public ZipEightByteInteger getSize()
    The uncompressed size stored in this extra field.
    Returns:
      The uncompressed size stored in this extra field.

  - ### parseFromCentralDirectoryData

    public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) throws ZipException
    Description copied from interface: `ZipExtraField`
    Populate data from this array as if it was in central directory data.
    Specified by:
      `parseFromCentralDirectoryData` in interface `ZipExtraField`
    Parameters:
      `buffer` - the buffer to read data from
      `offset` - offset into buffer to read data
      `length` - the length of data
    Throws:
      `ZipException` - on error

  - ### parseFromLocalFileData

    public void parseFromLocalFileData(byte[] buffer, int offset, int length) throws ZipException
    Description copied from interface: `ZipExtraField`
    Populate data from this array as if it was in local file data.
    Specified by:
      `parseFromLocalFileData` in interface `ZipExtraField`
    Parameters:
      `buffer` - the buffer to read data from
      `offset` - offset into buffer to read data
      `length` - the length of data
    Throws:
      `ZipException` - on error

  - ### reparseCentralDirectoryData

    public void reparseCentralDirectoryData(boolean hasUncompressedSize, boolean hasCompressedSize, boolean hasRelativeHeaderOffset, boolean hasDiskStart) throws ZipException
    Parses the raw bytes read from the central directory extra field with knowledge which fields are expected to be there.

    All four fields inside the zip64 extended information extra field are optional and must only be present if their corresponding entry inside the central directory contains the correct magic value.

    Parameters:
      `hasUncompressedSize` - flag to read from central directory
      `hasCompressedSize` - flag to read from central directory
      `hasRelativeHeaderOffset` - flag to read from central directory
      `hasDiskStart` - flag to read from central directory
    Throws:
      `ZipException` - on error

  - ### setCompressedSize

    public void setCompressedSize(ZipEightByteInteger compressedSize)
    The uncompressed size stored in this extra field.
    Parameters:
      `compressedSize` - The uncompressed size stored in this extra field.

  - ### setDiskStartNumber

    public void setDiskStartNumber(ZipLong ds)
    The disk start number stored in this extra field.
    Parameters:
      `ds` - The disk start number stored in this extra field.

  - ### setRelativeHeaderOffset

    public void setRelativeHeaderOffset(ZipEightByteInteger rho)
    The relative header offset stored in this extra field.
    Parameters:
      `rho` - The relative header offset stored in this extra field.

  - ### setSize

    public void setSize(ZipEightByteInteger size)
    The uncompressed size stored in this extra field.
    Parameters:
      `size` - The uncompressed size stored in this extra field.