## org.apache.tools.zip
Class Zip64ExtendedInformationExtraField

    java.lang.Object
      org.apache.tools.zip.Zip64ExtendedInformationExtraField

All Implemented Interfaces:
  CentralDirectoryParsingZipExtraField, ZipExtraField

    public class Zip64ExtendedInformationExtraField

extends java.lang.Object
implements CentralDirectoryParsingZipExtraField

Holds size and other extended information for entries that use Zip64 features.

From "http://www.pkware.com/documents/casestudies/APPNOTE.TXT PKWARE's APPNOTE.TXT"

     Zip64 Extended Information Extra Field (0x0001):

              The following is the layout of the zip64 extended
              information "extra" block. If one of the size or
              offset fields in the Local or Central directory
              record is too small to hold the required data,
              a Zip64 extended information record is created.
              The order of the fields in the zip64 extended
              information record is fixed, but the fields will
              only appear if the corresponding Local or Central
              directory record field is set to 0xFFFF or 0xFFFFFFFF.

              Note: all fields stored in Intel low-byte/high-byte order.

              Value      Size       Description
              -----      ----       -----------
      (ZIP64) 0x0001     2 bytes    Tag for this "extra" block type
              Size       2 bytes    Size of this "extra" block
              Original
              Size       8 bytes    Original uncompressed file size
              Compressed
              Size       8 bytes    Size of compressed data
              Relative Header
              Offset     8 bytes    Offset of local header record
              Disk Start
              Number     4 bytes    Number of the disk on which
                                    this file starts

              This entry in the Local header must include BOTH original
              and compressed file size fields. If encrypting the
              central directory and bit 13 of the general purpose bit
              flag is set indicating masking, the value stored in the
              Local Header for the original file size will be zero.

Currently Ant doesn't support encrypting the central directory so the note 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:
  Ant 1.9.0

Constructor Summary
`Zip64ExtendedInformationExtraField()` This constructor should only be used by the code that reads archives inside of Ant.
`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
`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 Detail

### Zip64ExtendedInformationExtraField

    public Zip64ExtendedInformationExtraField()

  This constructor should only be used by the code that reads archives inside of Ant.

### 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:
    `java.lang.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
  Throws:
    `java.lang.IllegalArgumentException` - if size or compressedSize is null

Method Detail

### getHeaderId

    public ZipShort getHeaderId()

  The Header-ID.

  Specified by:
    `getHeaderId` in interface `ZipExtraField`
  Returns:
    the header id

### getLocalFileDataLength

    public ZipShort getLocalFileDataLength()

  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

### getCentralDirectoryLength

    public ZipShort getCentralDirectoryLength()

  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

### getLocalFileDataData

    public byte[] getLocalFileDataData()

  The actual data to put into local file data - without Header-ID or length specifier.

  Specified by:
    `getLocalFileDataData` in interface `ZipExtraField`
  Returns:
    the data

### getCentralDirectoryData

    public byte[] getCentralDirectoryData()

  The actual data to put into central directory - without Header-ID or length specifier.

  Specified by:
    `getCentralDirectoryData` in interface `ZipExtraField`
  Returns:
    the data

### parseFromLocalFileData

    public void parseFromLocalFileData(byte[] buffer,
                                       int offset,
                                       int length)
                                throws java.util.zip.ZipException

  Populate data from this array as if it was in local file data.

  Specified by:
    `parseFromLocalFileData` in interface `ZipExtraField`
  Parameters:
    `buffer` - an array of bytes
    `offset` - the start offset
    `length` - the number of bytes in the array from offset
  Throws:
    `java.util.zip.ZipException` - on error

### parseFromCentralDirectoryData

    public void parseFromCentralDirectoryData(byte[] buffer,
                                              int offset,
                                              int length)
                                       throws java.util.zip.ZipException

  Populate data from this array as if it was in central directory data.

  Specified by:
    `parseFromCentralDirectoryData` in interface `CentralDirectoryParsingZipExtraField`
  Parameters:
    `buffer` - an array of bytes
    `offset` - the start offset
    `length` - the number of bytes in the array from offset
  Throws:
    `java.util.zip.ZipException` - on error

### reparseCentralDirectoryData

    public void reparseCentralDirectoryData(boolean hasUncompressedSize,
                                            boolean hasCompressedSize,
                                            boolean hasRelativeHeaderOffset,
                                            boolean hasDiskStart)
                                     throws java.util.zip.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.

  Throws:
    `java.util.zip.ZipException`

### getSize

    public ZipEightByteInteger getSize()

  The uncompressed size stored in this extra field.

### setSize

    public void setSize(ZipEightByteInteger size)

  The uncompressed size stored in this extra field.

### getCompressedSize

    public ZipEightByteInteger getCompressedSize()

  The compressed size stored in this extra field.

### setCompressedSize

    public void setCompressedSize(ZipEightByteInteger compressedSize)

  The uncompressed size stored in this extra field.

### getRelativeHeaderOffset

    public ZipEightByteInteger getRelativeHeaderOffset()

  The relative header offset stored in this extra field.

### setRelativeHeaderOffset

    public void setRelativeHeaderOffset(ZipEightByteInteger rho)

  The relative header offset stored in this extra field.

### getDiskStartNumber

    public ZipLong getDiskStartNumber()

  The disk start number stored in this extra field.

### setDiskStartNumber

    public void setDiskStartNumber(ZipLong ds)

  The disk start number stored in this extra field.