Class ZipArchiveInputStream
- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- org.apache.commons.compress.archivers.ArchiveInputStream<ZipArchiveEntry>
-
- org.apache.commons.compress.archivers.zip.ZipArchiveInputStream
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,InputStreamStatistics
- Direct Known Subclasses:
JarArchiveInputStream
public class ZipArchiveInputStream extends ArchiveInputStream<ZipArchiveEntry> implements InputStreamStatistics
Implements an input stream that can read Zip archives.As of Apache Commons Compress it transparently supports Zip64 extensions and thus individual entries and archives larger than 4 GB or with more than 65,536 entries.
The
ZipFile
class is preferred when reading from files asZipArchiveInputStream
is limited by not being able to read the central directory header before returning entries. In particularZipArchiveInputStream
- may return entries that are not part of the central directory at all and shouldn't be considered part of the archive.
- may return several entries with the same name.
- will not return internal or external attributes.
- may return incomplete extra field data.
- may return unknown sizes and CRC values for entries until the next entry has been reached if the archive uses the data descriptor feature.
- See Also:
ZipFile
-
-
Field Summary
Fields Modifier and Type Field Description static int
PREAMBLE_GARBAGE_MAX_SIZE
-
Constructor Summary
Constructors Constructor Description ZipArchiveInputStream(java.io.InputStream inputStream)
Constructs an instance using UTF-8 encodingZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding)
Constructs an instance using the specified encodingZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields)
Constructs an instance using the specified encodingZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields, boolean allowStoredEntriesWithDataDescriptor)
Constructs an instance using the specified encodingZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields, boolean allowStoredEntriesWithDataDescriptor, boolean skipSplitSig)
Constructs an instance using the specified encoding
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description boolean
canReadEntryData(ArchiveEntry ae)
Whether this class is able to read the given entry.void
close()
long
getCompressedCount()
Gets the amount of raw or compressed bytes read by the stream.ZipArchiveEntry
getNextEntry()
Gets the next Archive Entry in this Stream.ZipArchiveEntry
getNextZipEntry()
Deprecated.UsegetNextEntry()
.long
getUncompressedCount()
Gets the uncompressed count.static boolean
matches(byte[] signature, int length)
Checks if the signature matches what is expected for a ZIP file.int
read(byte[] buffer, int offset, int length)
ZipArchiveInputStream
setExtraFieldSupport(java.util.function.Function<ZipShort,ZipExtraField> extraFieldSupport)
Enable custom extra fields factory.long
skip(long value)
Skips over and discards value bytes of data from this input stream.-
Methods inherited from class org.apache.commons.compress.archivers.ArchiveInputStream
getBytesRead, getCharset, getCount, mark, markSupported, read, reset
-
-
-
-
Field Detail
-
PREAMBLE_GARBAGE_MAX_SIZE
public static final int PREAMBLE_GARBAGE_MAX_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
ZipArchiveInputStream
public ZipArchiveInputStream(java.io.InputStream inputStream)
Constructs an instance using UTF-8 encoding- Parameters:
inputStream
- the stream to wrap
-
ZipArchiveInputStream
public ZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding)
Constructs an instance using the specified encoding- Parameters:
inputStream
- the stream to wrapencoding
- the encoding to use for file names, use null for the platform's default encoding- Since:
- 1.5
-
ZipArchiveInputStream
public ZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields)
Constructs an instance using the specified encoding- Parameters:
inputStream
- the stream to wrapencoding
- the encoding to use for file names, use null for the platform's default encodinguseUnicodeExtraFields
- whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.
-
ZipArchiveInputStream
public ZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields, boolean allowStoredEntriesWithDataDescriptor)
Constructs an instance using the specified encoding- Parameters:
inputStream
- the stream to wrapencoding
- the encoding to use for file names, use null for the platform's default encodinguseUnicodeExtraFields
- whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.allowStoredEntriesWithDataDescriptor
- whether the stream will try to read STORED entries that use a data descriptor- Since:
- 1.1
-
ZipArchiveInputStream
public ZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields, boolean allowStoredEntriesWithDataDescriptor, boolean skipSplitSig)
Constructs an instance using the specified encoding- Parameters:
inputStream
- the stream to wrapencoding
- the encoding to use for file names, use null for the platform's default encodinguseUnicodeExtraFields
- whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.allowStoredEntriesWithDataDescriptor
- whether the stream will try to read STORED entries that use a data descriptorskipSplitSig
- Whether the stream will try to skip the zip split signature(08074B50) at the beginning. You will need to set this to true if you want to read a split archive.- Since:
- 1.20
-
-
Method Detail
-
matches
public static boolean matches(byte[] signature, int length)
Checks if the signature matches what is expected for a ZIP file. Does not currently handle self-extracting ZIPs which may have arbitrary leading content.- Parameters:
signature
- the bytes to checklength
- the number of bytes to check- Returns:
- true, if this stream is a ZIP archive stream, false otherwise
-
canReadEntryData
public boolean canReadEntryData(ArchiveEntry ae)
Whether this class is able to read the given entry.May return false if it is set up to use encryption or a compression method that hasn't been implemented yet.
- Overrides:
canReadEntryData
in classArchiveInputStream<ZipArchiveEntry>
- Parameters:
ae
- the entry to test- Returns:
- This implementation always returns true.
- Since:
- 1.1
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
getCompressedCount
public long getCompressedCount()
Description copied from interface:InputStreamStatistics
Gets the amount of raw or compressed bytes read by the stream.- Specified by:
getCompressedCount
in interfaceInputStreamStatistics
- Returns:
- the amount of raw or compressed bytes read by the stream.
- Since:
- 1.17
-
getNextEntry
public ZipArchiveEntry getNextEntry() throws java.io.IOException
Description copied from class:ArchiveInputStream
Gets the next Archive Entry in this Stream.- Specified by:
getNextEntry
in classArchiveInputStream<ZipArchiveEntry>
- Returns:
- the next entry, or
null
if there are no more entries - Throws:
java.io.IOException
- if the next entry could not be read
-
getNextZipEntry
@Deprecated public ZipArchiveEntry getNextZipEntry() throws java.io.IOException
Deprecated.UsegetNextEntry()
.Gets the next entry.- Returns:
- the next entry.
- Throws:
java.io.IOException
- if an I/O error occurs.
-
getUncompressedCount
public long getUncompressedCount()
Gets the uncompressed count.- Specified by:
getUncompressedCount
in interfaceInputStreamStatistics
- Returns:
- the amount of decompressed bytes returned by the stream.
- Since:
- 1.17
-
read
public int read(byte[] buffer, int offset, int length) throws java.io.IOException
- Overrides:
read
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
setExtraFieldSupport
public ZipArchiveInputStream setExtraFieldSupport(java.util.function.Function<ZipShort,ZipExtraField> extraFieldSupport)
Enable custom extra fields factory.- Parameters:
extraFieldSupport
- the lookup function based on extra field header id.- Returns:
- the archive.
-
skip
public long skip(long value) throws java.io.IOException
Skips over and discards value bytes of data from this input stream.This implementation may end up skipping over some smaller number of bytes, possibly 0, if and only if it reaches the end of the underlying stream.
The actual number of bytes skipped is returned.
- Overrides:
skip
in classjava.io.FilterInputStream
- Parameters:
value
- the number of bytes to be skipped.- Returns:
- the actual number of bytes skipped.
- Throws:
java.io.IOException
- - if an I/O error occurs.java.lang.IllegalArgumentException
- - if value is negative.
-
-