Package 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.
See PKWARE's APPNOTE.TXT, section 4.5.3.
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
Constructors Constructor Description 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
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.
-
Constructor Details
-
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 sizecompressedSize
- 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 sizecompressedSize
- the entry's compressed sizerelativeHeaderOffset
- ZipEightByteIntegerdiskStart
- ZipLong- Throws:
java.lang.IllegalArgumentException
- if size or compressedSize is null
-
-
Method Details
-
getHeaderId
The Header-ID.- Specified by:
getHeaderId
in interfaceZipExtraField
- Returns:
- the header id
-
getLocalFileDataLength
Length of the extra field in the local file data - without Header-ID or length specifier.- Specified by:
getLocalFileDataLength
in interfaceZipExtraField
- Returns:
- the length of the field in the local file data
-
getCentralDirectoryLength
Length of the extra field in the central directory - without Header-ID or length specifier.- Specified by:
getCentralDirectoryLength
in interfaceZipExtraField
- 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 interfaceZipExtraField
- 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 interfaceZipExtraField
- Returns:
- the data
-
parseFromLocalFileData
public void parseFromLocalFileData(byte[] buffer, int offset, int length) throws java.util.zip.ZipExceptionPopulate data from this array as if it was in local file data.- Specified by:
parseFromLocalFileData
in interfaceZipExtraField
- Parameters:
buffer
- an array of bytesoffset
- the start offsetlength
- 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.ZipExceptionPopulate data from this array as if it was in central directory data.- Specified by:
parseFromCentralDirectoryData
in interfaceCentralDirectoryParsingZipExtraField
- Parameters:
buffer
- an array of bytesoffset
- the start offsetlength
- 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.ZipExceptionParses 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
- booleanhasCompressedSize
- booleanhasRelativeHeaderOffset
- booleanhasDiskStart
- boolean- Throws:
java.util.zip.ZipException
- if expected length of central directory data is incorrect
-
getSize
The uncompressed size stored in this extra field.- Returns:
- ZipEightByteInteger
-
setSize
The uncompressed size stored in this extra field.- Parameters:
size
- ZipEightByteInteger
-
getCompressedSize
The compressed size stored in this extra field.- Returns:
- ZipEightByteInteger
-
setCompressedSize
The uncompressed size stored in this extra field.- Parameters:
compressedSize
- ZipEightByteInteger
-
getRelativeHeaderOffset
The relative header offset stored in this extra field.- Returns:
- ZipEightByteInteger
-
setRelativeHeaderOffset
The relative header offset stored in this extra field.- Parameters:
rho
- ZipEightByteInteger
-
getDiskStartNumber
The disk start number stored in this extra field.- Returns:
- ZipLong
-
setDiskStartNumber
The disk start number stored in this extra field.- Parameters:
ds
- ZipLong
-