org.apache.commons.compress.archivers.zip
public class ZipArchiveInputStream extends ArchiveInputStream
Note that ZipEntry.getSize()
may return -1 if the DEFLATE algorithm is used, as the size information
is not available from the header.
The ZipFile
class is preferred when reading from files.
ZipFile
Modifier and Type | Field and Description |
---|---|
private boolean |
allowStoredEntriesWithDataDescriptor |
private byte[] |
buf |
private int |
bytesReadFromStream |
private boolean |
closed |
private java.util.zip.CRC32 |
crc |
private ZipArchiveEntry |
current |
private boolean |
hasDataDescriptor |
private boolean |
hitCentralDirectory |
private java.io.InputStream |
in |
private java.util.zip.Inflater |
inf |
private java.io.ByteArrayInputStream |
lastStoredEntry |
private int |
lengthOfLastRead |
private static int |
LFH_LEN |
private int |
offsetInBuffer |
private int |
readBytesOfEntry |
private static int |
SHORT |
private boolean |
useUnicodeExtraFields
Whether to look for and use Unicode extra fields.
|
private static int |
WORD |
private ZipEncoding |
zipEncoding
The zip encoding to use for filenames and the file comment.
|
Constructor and Description |
---|
ZipArchiveInputStream(java.io.InputStream inputStream) |
ZipArchiveInputStream(java.io.InputStream inputStream,
java.lang.String encoding,
boolean useUnicodeExtraFields) |
ZipArchiveInputStream(java.io.InputStream inputStream,
java.lang.String encoding,
boolean useUnicodeExtraFields,
boolean allowStoredEntriesWithDataDescriptor) |
Modifier and Type | Method and Description |
---|---|
boolean |
canReadEntryData(ArchiveEntry ae)
Whether this class is able to read the given entry.
|
private static boolean |
checksig(byte[] signature,
byte[] expected) |
void |
close() |
private void |
closeEntry()
Closes the current ZIP archive entry and positions the underlying
stream to the beginning of the next entry.
|
private void |
fill() |
ArchiveEntry |
getNextEntry()
Returns the next Archive Entry in this Stream.
|
ZipArchiveEntry |
getNextZipEntry() |
static boolean |
matches(byte[] signature,
int length)
Checks if the signature matches what is expected for a zip file.
|
int |
read(byte[] buffer,
int start,
int length) |
private void |
readDataDescriptor() |
private void |
readFully(byte[] b) |
private void |
readStoredEntry()
Caches a stored entry that uses the data descriptor.
|
long |
skip(long value) |
private boolean |
supportsDataDescriptorFor(ZipArchiveEntry entry)
Whether this entry requires a data descriptor this library can work with.
|
count, count, getBytesRead, getCount, pushedBackBytes, read
private static final int SHORT
private static final int WORD
private final ZipEncoding zipEncoding
private final boolean useUnicodeExtraFields
private final java.io.InputStream in
private final java.util.zip.Inflater inf
private final java.util.zip.CRC32 crc
private final byte[] buf
private ZipArchiveEntry current
private boolean closed
private boolean hitCentralDirectory
private int readBytesOfEntry
private int offsetInBuffer
private int bytesReadFromStream
private int lengthOfLastRead
private boolean hasDataDescriptor
private java.io.ByteArrayInputStream lastStoredEntry
private boolean allowStoredEntriesWithDataDescriptor
private static final int LFH_LEN
public ZipArchiveInputStream(java.io.InputStream inputStream)
public ZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields)
encoding
- 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.public ZipArchiveInputStream(java.io.InputStream inputStream, java.lang.String encoding, boolean useUnicodeExtraFields, boolean allowStoredEntriesWithDataDescriptor)
encoding
- 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 descriptorpublic ZipArchiveEntry getNextZipEntry() throws java.io.IOException
java.io.IOException
public ArchiveEntry getNextEntry() throws java.io.IOException
getNextEntry
in class ArchiveInputStream
null
if there are no more entriesjava.io.IOException
- if the next entry could not be readpublic boolean canReadEntryData(ArchiveEntry ae)
May return false if it is set up to use encryption or a compression method that hasn't been implemented yet.
canReadEntryData
in class ArchiveInputStream
public int read(byte[] buffer, int start, int length) throws java.io.IOException
read
in class java.io.InputStream
java.io.IOException
public void close() throws java.io.IOException
close
in interface java.io.Closeable
close
in class java.io.InputStream
java.io.IOException
public long skip(long value) throws java.io.IOException
skip
in class java.io.InputStream
java.io.IOException
public static boolean matches(byte[] signature, int length)
signature
- the bytes to checklength
- the number of bytes to checkprivate static boolean checksig(byte[] signature, byte[] expected)
private void closeEntry() throws java.io.IOException
If the compressed size of this entry is included in the entry header, then any outstanding bytes are simply skipped from the underlying stream without uncompressing them. This allows an entry to be safely closed even if the compression method is unsupported.
In case we don't know the compressed size of this entry or have already buffered too much data from the underlying stream to support uncompression, then the uncompression process is completed and the end position of the stream is adjusted based on the result of that process.
java.io.IOException
- if an error occursprivate void fill() throws java.io.IOException
java.io.IOException
private void readFully(byte[] b) throws java.io.IOException
java.io.IOException
private void readDataDescriptor() throws java.io.IOException
java.io.IOException
private boolean supportsDataDescriptorFor(ZipArchiveEntry entry)
private void readStoredEntry() throws java.io.IOException
After calling this method the entry should know its size, the entry's data is cached and the stream is positioned at the next local file or central directory header.
java.io.IOException