org.apache.commons.compress.archivers.zip

Class ZipOutputStream

class ZipOutputStream extends DeflaterOutputStream

Reimplementation of java.util.zip.ZipOutputStream 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.

Version: $Revision: 155439 $

Author: Stefan Bodewig

Field Summary
protected static ZipLongCFH_SIG
central file header signature
protected static ZipLongDD_SIG
data descriptor signature
static intDEFLATED
Compression method for deflated entries.
static ZipLongDOS_TIME_MIN
Smallest date/time ZIP can handle.
protected static ZipLongEOCD_SIG
end of central dir signature
protected static ZipLongLFH_SIG
local file header signature
static byte[]LZERO
Helper, a 0 as ZipLong.
ZipLongm_cdLength
Length of central directory.
ZipLongm_cdOffset
Start of central directory.
Stringm_comment
The file comment.
CRC32m_crc
CRC instance to avoid parsing DEFLATED data twice.
longm_dataStart
Data for current entry started here.
Stringm_encoding
The encoding to use for filenames and the file comment.
ArrayListm_entries
List of ZipEntries written so far.
ZipEntrym_entry
Current entry.
intm_level
Compression level for next entry.
intm_method
Default compression method for next entry.
Hashtablem_offsets
Holds the offsets of the LFH starts for each entry
longm_written
Count the bytes written to out.
static intSTORED
Compression method for deflated entries.
static byte[]ZERO
Helper, a 0 as ZipShort.
Constructor Summary
ZipOutputStream(OutputStream output)
Creates a new ZIP OutputStream filtering the underlying stream.
Method Summary
voidcloseEntry()
Writes all necessary data for this entry.
voidfinish()
Finishs writing the contents and closes this as well as the underlying stream.
protected byte[]getBytes(String name)
Retrieve the bytes for the given String in the encoding set for this Stream.
StringgetEncoding()
The encoding to use for filenames and the file comment.
voidputNextEntry(ZipEntry entry)
Begin writing next entry.
voidsetComment(String comment)
Set the file comment.
voidsetEncoding(String encoding)
The encoding to use for filenames and the file comment.
voidsetLevel(int level)
Sets the compression level for subsequent entries.
voidsetMethod(int method)
Sets the default compression method for subsequent entries.
protected static ZipLongtoDosTime(Date time)
Convert a Date object to a DOS date/time field.
voidwrite(byte[] buffer, int offset, int length)
Writes bytes to ZIP entry.
protected voidwriteCentralDirectoryEnd()
Writes the "End of central dir record"
protected voidwriteCentralFileHeader(ZipEntry entry)
Writes the central file header entry
protected voidwriteDataDescriptor(ZipEntry ze)
Writes the data descriptor entry
protected voidwriteLocalFileHeader(ZipEntry entry)
Writes the local file header entry

Field Detail

CFH_SIG

protected static final ZipLong CFH_SIG
central file header signature

Since: 1.1

DD_SIG

protected static final ZipLong DD_SIG
data descriptor signature

Since: 1.1

DEFLATED

public static final int DEFLATED
Compression method for deflated entries.

Since: 1.1

DOS_TIME_MIN

private static final ZipLong DOS_TIME_MIN
Smallest date/time ZIP can handle.

Since: 1.1

EOCD_SIG

protected static final ZipLong EOCD_SIG
end of central dir signature

Since: 1.1

LFH_SIG

protected static final ZipLong LFH_SIG
local file header signature

Since: 1.1

LZERO

private static final byte[] LZERO
Helper, a 0 as ZipLong.

Since: 1.1

m_cdLength

private ZipLong m_cdLength
Length of central directory.

Since: 1.1

m_cdOffset

private ZipLong m_cdOffset
Start of central directory.

Since: 1.1

m_comment

private String m_comment
The file comment.

Since: 1.1

m_crc

private final CRC32 m_crc
CRC instance to avoid parsing DEFLATED data twice.

Since: 1.1

m_dataStart

private long m_dataStart
Data for current entry started here.

Since: 1.1

m_encoding

private String m_encoding
The encoding to use for filenames and the file comment.

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.

Since: 1.3

m_entries

private final ArrayList m_entries
List of ZipEntries written so far.

Since: 1.1

m_entry

private ZipEntry m_entry
Current entry.

Since: 1.1

m_level

private int m_level
Compression level for next entry.

Since: 1.1

m_method

private int m_method
Default compression method for next entry.

Since: 1.1

m_offsets

private final Hashtable m_offsets
Holds the offsets of the LFH starts for each entry

Since: 1.1

m_written

private long m_written
Count the bytes written to out.

Since: 1.1

STORED

public static final int STORED
Compression method for deflated entries.

Since: 1.1

ZERO

private static final byte[] ZERO
Helper, a 0 as ZipShort.

Since: 1.1

Constructor Detail

ZipOutputStream

public ZipOutputStream(OutputStream output)
Creates a new ZIP OutputStream filtering the underlying stream.

Parameters: output the output stream to write to

Since: 1.1

Method Detail

closeEntry

public void closeEntry()
Writes all necessary data for this entry.

Throws: IOException if an IO failure causes operation to fail

Since: 1.1

finish

public void finish()
Finishs writing the contents and closes this as well as the underlying stream.

Throws: IOException if an IO failure causes operation to fail

Since: 1.1

getBytes

protected byte[] getBytes(String name)
Retrieve the bytes for the given String in the encoding set for this Stream.

Parameters: name the name to decode

Returns: the bytes for string

Throws: ZipException if fail to retrieve bytes for specified string

Since: 1.3

getEncoding

public String getEncoding()
The encoding to use for filenames and the file comment.

Returns: null if using the platform's default character encoding.

Since: 1.3

putNextEntry

public void putNextEntry(ZipEntry entry)
Begin writing next entry.

Parameters: entry the entry

Throws: IOException if an IO failure causes operation to fail

Since: 1.1

setComment

public void setComment(String comment)
Set the file comment.

Parameters: comment The new Comment value

Since: 1.1

setEncoding

public void setEncoding(String encoding)
The encoding to use for filenames and the file comment.

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.

Parameters: encoding The new Encoding value

Since: 1.3

setLevel

public void setLevel(int level)
Sets the compression level for subsequent entries.

Default is Deflater.DEFAULT_COMPRESSION.

Parameters: level The new Level value

Since: 1.1

setMethod

public void setMethod(int method)
Sets the default compression method for subsequent entries.

Default is DEFLATED.

Parameters: method The new Method value

Since: 1.1

toDosTime

protected static ZipLong toDosTime(Date time)
Convert a Date object to a DOS date/time field.

Stolen from InfoZip's fileio.c

Parameters: time Description of Parameter

Returns: Description of the Returned Value

Since: 1.1

write

public void write(byte[] buffer, int offset, int length)
Writes bytes to ZIP entry.

Override is necessary to support STORED entries, as well as calculationg CRC automatically for DEFLATED entries.

Parameters: buffer the buffer to write to offset the offset to write to length the length of data to write

Throws: IOException if an IO error causes operation to fail

writeCentralDirectoryEnd

protected void writeCentralDirectoryEnd()
Writes the "End of central dir record"

Throws: IOException when an IO erro causes operation to fail

Since: 1.1

writeCentralFileHeader

protected void writeCentralFileHeader(ZipEntry entry)
Writes the central file header entry

Parameters: entry the zip entry

Throws: IOException when an IO error causes operation to fail

Since: 1.1

writeDataDescriptor

protected void writeDataDescriptor(ZipEntry ze)
Writes the data descriptor entry

Parameters: ze Description of Parameter

Throws: IOException if an IO failure causes operation to fail

Since: 1.1

writeLocalFileHeader

protected void writeLocalFileHeader(ZipEntry entry)
Writes the local file header entry

Parameters: entry the zip entry

Throws: IOException when an IO error causes operation to fail

Since: 1.1