Class Zip64ExtendedInformationExtraField

  • All Implemented Interfaces:
    ZipExtraField

    public class Zip64ExtendedInformationExtraField
    extends java.lang.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
    • Constructor Detail

      • 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:
        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
        relativeHeaderOffset - the entry's offset
        diskStart - the disk start
        Throws:
        java.lang.IllegalArgumentException - if size or compressedSize is null
    • Method Detail

      • 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
      • 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
      • 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
      • 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
      • parseFromLocalFileData

        public void parseFromLocalFileData​(byte[] buffer,
                                           int offset,
                                           int length)
                                    throws java.util.zip.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:
        java.util.zip.ZipException - on error
      • parseFromCentralDirectoryData

        public void parseFromCentralDirectoryData​(byte[] buffer,
                                                  int offset,
                                                  int length)
                                           throws java.util.zip.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:
        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.

        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:
        java.util.zip.ZipException - on error
      • getSize

        public ZipEightByteInteger getSize()
        The uncompressed size stored in this extra field.
        Returns:
        The uncompressed size 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.
      • getCompressedSize

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

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

        public ZipEightByteInteger getRelativeHeaderOffset()
        The relative header offset stored in this extra field.
        Returns:
        The relative header offset 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.
      • getDiskStartNumber

        public ZipLong getDiskStartNumber()
        The disk start number stored in this extra field.
        Returns:
        The disk start number 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.