class ZipOutputStream
extends java.util.zip.DeflaterOutputStream
java.util.zip.ZipOutputStream
that does handle the extended functionality of
this package, especially internal/external file attributes and extra fields
with different layouts for local file data and central directory entries.
This implementation will use a Data Descriptor to store size and CRC
information for DEFLATED entries, this means, you don't need to calculate
them yourself. Unfortunately this is not possible for the STORED method, here
setting the CRC and uncompressed size information is required before putNextEntry
will be called.
Modifier and Type | Field and Description |
---|---|
protected static ZipLong |
CFH_SIG
central file header signature
|
protected static ZipLong |
DD_SIG
data descriptor signature
|
static int |
DEFLATED
Compression method for deflated entries.
|
private static ZipLong |
DOS_TIME_MIN
Smallest date/time ZIP can handle.
|
protected static ZipLong |
EOCD_SIG
end of central dir signature
|
protected static ZipLong |
LFH_SIG
local file header signature
|
private static byte[] |
LZERO
Helper, a 0 as ZipLong.
|
private ZipLong |
m_cdLength
Length of central directory.
|
private ZipLong |
m_cdOffset
Start of central directory.
|
private java.lang.String |
m_comment
The file comment.
|
private java.util.zip.CRC32 |
m_crc
CRC instance to avoid parsing DEFLATED data twice.
|
private long |
m_dataStart
Data for current entry started here.
|
private java.lang.String |
m_encoding
The encoding to use for filenames and the file comment.
|
private java.util.ArrayList |
m_entries
List of ZipEntries written so far.
|
private ZipEntry |
m_entry
Current entry.
|
private int |
m_level
Compression level for next entry.
|
private int |
m_method
Default compression method for next entry.
|
private java.util.Hashtable |
m_offsets
Holds the offsets of the LFH starts for each entry
|
private long |
m_written
Count the bytes written to out.
|
static int |
STORED
Compression method for deflated entries.
|
private static byte[] |
ZERO
Helper, a 0 as ZipShort.
|
Constructor and Description |
---|
ZipOutputStream(java.io.OutputStream output)
Creates a new ZIP OutputStream filtering the underlying stream.
|
Modifier and Type | Method and Description |
---|---|
void |
closeEntry()
Writes all necessary data for this entry.
|
void |
finish()
Finishs writing the contents and closes this as well as the underlying
stream.
|
protected byte[] |
getBytes(java.lang.String name)
Retrieve the bytes for the given String in the encoding set for this
Stream.
|
java.lang.String |
getEncoding()
The encoding to use for filenames and the file comment.
|
void |
putNextEntry(ZipEntry entry)
Begin writing next entry.
|
void |
setComment(java.lang.String comment)
Set the file comment.
|
void |
setEncoding(java.lang.String encoding)
The encoding to use for filenames and the file comment.
|
void |
setLevel(int level)
Sets the compression level for subsequent entries.
|
void |
setMethod(int method)
Sets the default compression method for subsequent entries.
|
protected static ZipLong |
toDosTime(java.util.Date time)
Convert a Date object to a DOS date/time field.
|
void |
write(byte[] buffer,
int offset,
int length)
Writes bytes to ZIP entry.
|
protected void |
writeCentralDirectoryEnd()
Writes the "End of central dir record"
|
protected void |
writeCentralFileHeader(ZipEntry entry)
Writes the central file header entry
|
protected void |
writeDataDescriptor(ZipEntry ze)
Writes the data descriptor entry
|
protected void |
writeLocalFileHeader(ZipEntry entry)
Writes the local file header entry
|
private static final byte[] ZERO
private static final byte[] LZERO
public static final int DEFLATED
public static final int STORED
protected static final ZipLong LFH_SIG
protected static final ZipLong DD_SIG
protected static final ZipLong CFH_SIG
protected static final ZipLong EOCD_SIG
private static final ZipLong DOS_TIME_MIN
private java.lang.String m_comment
private int m_level
private int m_method
private final java.util.ArrayList m_entries
private final java.util.zip.CRC32 m_crc
private long m_written
private long m_dataStart
private ZipLong m_cdOffset
private ZipLong m_cdLength
private final java.util.Hashtable m_offsets
private java.lang.String m_encoding
For a list of possible values see http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html . Defaults to the platform's default character encoding.
private ZipEntry m_entry
public ZipOutputStream(java.io.OutputStream output)
output
- the output stream to write toprotected static ZipLong toDosTime(java.util.Date time)
Stolen from InfoZip's fileio.c
time
- Description of Parameterpublic void setComment(java.lang.String comment)
comment
- The new Comment valuepublic void setEncoding(java.lang.String encoding)
For a list of possible values see http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html . Defaults to the platform's default character encoding.
encoding
- The new Encoding valuepublic void setLevel(int level)
Default is Deflater.DEFAULT_COMPRESSION.
level
- The new Level valuepublic void setMethod(int method)
Default is DEFLATED.
method
- The new Method valuepublic java.lang.String getEncoding()
public void closeEntry() throws java.io.IOException
java.io.IOException
- if an IO failure causes operation to failpublic void finish() throws java.io.IOException
finish
in class java.util.zip.DeflaterOutputStream
java.io.IOException
- if an IO failure causes operation to failpublic void putNextEntry(ZipEntry entry) throws java.io.IOException
entry
- the entryjava.io.IOException
- if an IO failure causes operation to failpublic void write(byte[] buffer, int offset, int length) throws java.io.IOException
Override is necessary to support STORED entries, as well as calculationg CRC automatically for DEFLATED entries.
write
in class java.util.zip.DeflaterOutputStream
buffer
- the buffer to write tooffset
- the offset to write tolength
- the length of data to writejava.io.IOException
- if an IO error causes operation to failprotected byte[] getBytes(java.lang.String name) throws java.util.zip.ZipException
name
- the name to decodejava.util.zip.ZipException
- if fail to retrieve bytes for specified stringprotected void writeCentralDirectoryEnd() throws java.io.IOException
java.io.IOException
- when an IO erro causes operation to failprotected void writeCentralFileHeader(ZipEntry entry) throws java.io.IOException
entry
- the zip entryjava.io.IOException
- when an IO error causes operation to failprotected void writeDataDescriptor(ZipEntry ze) throws java.io.IOException
ze
- Description of Parameterjava.io.IOException
- if an IO failure causes operation to failprotected void writeLocalFileHeader(ZipEntry entry) throws java.io.IOException
entry
- the zip entryjava.io.IOException
- when an IO error causes operation to fail