org.codehaus.plexus.archiver.zip

Class ZipOutputStream

public class ZipOutputStream extends FilterOutputStream

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 class will try to use java.io.RandomAccessFile RandomAccessFile when you know that the output is going to go to a file.

If RandomAccessFile cannot be used, 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 can be called.

Version: $Revision: 2436 $ $Date: 2005-09-01 13:20:41 -0400 (Thu, 01 Sep 2005) $ from org.apache.ant.tools.zip.ZipOutputStream v1.24

Field Summary
protected byte[]buf
This buffer servers as a Deflater.
ZipLongcdLength
Length of central directory.
ZipLongcdOffset
Start of central directory.
Stringcomment
The file comment.
CRC32crc
CRC instance to avoid parsing DEFLATED data twice.
protected static ZipLongCFH_SIG
central file header signature
longdataStart
Data for local header data
protected Deflaterdef
This Deflater object is used for output.
protected static ZipLongDD_SIG
data descriptor signature
static intDEFLATED
Compression method for deflated entries.
static ZipLongDOS_TIME_MIN
Smallest date/time ZIP can handle.
Stringencoding
The encoding to use for filenames and the file comment.
Vectorentries
List of ZipEntries written so far.
ZipEntryentry
Current entry.
protected static ZipLongEOCD_SIG
end of central dir signature
booleanhasCompressionLevelChanged
Has the compression level changed when compared to the last entry?
intlevel
Compression level for next entry.
longlocalDataStart
Offset for CRC entry in the local file header data for the current entry starts here.
protected static ZipLongLFH_SIG
local file header signature
static byte[]LZERO
Helper, a 0 as ZipLong.
intmethod
Default compression method for next entry.
Hashtableoffsets
Holds the offsets of the LFH starts for each entry.
RandomAccessFileraf
Optional random access output.
static intSTORED
Compression method for deflated entries.
longwritten
Count the bytes written to out.
static byte[]ZERO
Helper, a 0 as ZipShort.
Constructor Summary
ZipOutputStream(OutputStream out)
Creates a new ZIP OutputStream filtering the underlying stream.
ZipOutputStream(File file)
Creates a new ZIP OutputStream writing to a File.
Method Summary
voidclose()
Closes this output stream and releases any system resources associated with the stream.
voidcloseEntry()
Writes all necessary data for this entry.
protected voiddeflate()
Writes next block of compressed data to the output stream.
voidfinish()
Finishs writing the contents and closes this as well as the underlying stream.
voidflush()
Flushes this output stream and forces any buffered output bytes to be written out to the 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.
booleanisSeekable()
This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).
voidputNextEntry(ZipEntry ze)
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[] b, int offset, int length)
Writes bytes to ZIP entry.
voidwrite(int b)
Writes a single byte to ZIP entry.
protected voidwriteCentralDirectoryEnd()
Writes the "End of central dir record"
protected voidwriteCentralFileHeader(ZipEntry ze)
Writes the central file header entry
protected voidwriteDataDescriptor(ZipEntry ze)
Writes the data descriptor entry
protected voidwriteLocalFileHeader(ZipEntry ze)
Writes the local file header entry
protected voidwriteOut(byte[] data)
Write bytes to output or random access file
protected voidwriteOut(byte[] data, int offset, int length)
Write bytes to output or random access file

Field Detail

buf

protected byte[] buf
This buffer servers as a Deflater.

This attribute is only protected to provide a level of API backwards compatibility. This class used to extend java.util.zip.DeflaterOutputStream DeflaterOutputStream up to Revision 1.13.

Since: 1.14

cdLength

private ZipLong cdLength
Length of central directory.

Since: 1.1

cdOffset

private ZipLong cdOffset
Start of central directory.

Since: 1.1

comment

private String comment
The file comment.

Since: 1.1

crc

private CRC32 crc
CRC instance to avoid parsing DEFLATED data twice.

Since: 1.1

CFH_SIG

protected static final ZipLong CFH_SIG
central file header signature

Since: 1.1

dataStart

private long dataStart
Data for local header data

Since: 1.1

def

protected Deflater def
This Deflater object is used for output.

This attribute is only protected to provide a level of API backwards compatibility. This class used to extend java.util.zip.DeflaterOutputStream DeflaterOutputStream up to Revision 1.13.

Since: 1.14

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

encoding

private 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.

Since: 1.3

entries

private Vector entries
List of ZipEntries written so far.

Since: 1.1

entry

private ZipEntry entry
Current entry.

Since: 1.1

EOCD_SIG

protected static final ZipLong EOCD_SIG
end of central dir signature

Since: 1.1

hasCompressionLevelChanged

private boolean hasCompressionLevelChanged
Has the compression level changed when compared to the last entry?

Since: 1.5

level

private int level
Compression level for next entry.

Since: 1.1

localDataStart

private long localDataStart
Offset for CRC entry in the local file header data for the current entry starts here.

Since: 1.15

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

method

private int method
Default compression method for next entry.

Since: 1.1

offsets

private Hashtable offsets
Holds the offsets of the LFH starts for each entry.

Since: 1.1

raf

private RandomAccessFile raf
Optional random access output.

Since: 1.14

STORED

public static final int STORED
Compression method for deflated entries.

Since: 1.1

written

private long written
Count the bytes written to out.

Since: 1.1

ZERO

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

Since: 1.1

Constructor Detail

ZipOutputStream

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

Since: 1.1

ZipOutputStream

public ZipOutputStream(File file)
Creates a new ZIP OutputStream writing to a File. Will use random access if possible.

Since: 1.14

Method Detail

close

public void close()
Closes this output stream and releases any system resources associated with the stream.

Throws: IOException if an I/O error occurs.

Since: 1.14

closeEntry

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

Since: 1.1

deflate

protected final void deflate()
Writes next block of compressed data to the output stream.

Since: 1.14

finish

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

Since: 1.1

flush

public void flush()
Flushes this output stream and forces any buffered output bytes to be written out to the stream.

Throws: IOException if an I/O error occurs.

Since: 1.14

getBytes

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

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

isSeekable

public boolean isSeekable()
This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).

For seekable streams, you don't need to calculate the CRC or uncompressed size for STORED entries before invoking ZipOutputStream.

Since: 1.17

putNextEntry

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

Since: 1.1

setComment

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

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.

Since: 1.3

setLevel

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

Default is Deflater.DEFAULT_COMPRESSION.

Since: 1.1

setMethod

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

Default is DEFLATED.

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

Since: 1.1

write

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

write

public void write(int b)
Writes a single byte to ZIP entry.

Delegates to the three arg method.

Since: 1.14

writeCentralDirectoryEnd

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

Since: 1.1

writeCentralFileHeader

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

Since: 1.1

writeDataDescriptor

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

Since: 1.1

writeLocalFileHeader

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

Since: 1.1

writeOut

protected final void writeOut(byte[] data)
Write bytes to output or random access file

Since: 1.14

writeOut

protected final void writeOut(byte[] data, int offset, int length)
Write bytes to output or random access file

Since: 1.14