org.codehaus.plexus.archiver.zip
Class ZipOutputStream

java.lang.Object
  extended by java.io.OutputStream
      extended by java.io.FilterOutputStream
          extended by org.codehaus.plexus.archiver.zip.ZipOutputStream
All Implemented Interfaces:
java.io.Closeable, java.io.Flushable

public class ZipOutputStream
extends java.io.FilterOutputStream

Reimplementation of 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 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 10:20:41 -0700 (Thu, 01 Sep 2005) $ from org.apache.ant.tools.zip.ZipOutputStream v1.24

Field Summary
protected  byte[] buf
          This buffer servers as a Deflater.
protected static ZipLong CFH_SIG
          central file header signature
protected static ZipLong DD_SIG
          data descriptor signature
protected  java.util.zip.Deflater def
          This Deflater object is used for output.
static int DEFLATED
          Compression method for deflated entries.
protected static ZipLong EOCD_SIG
          end of central dir signature
protected static ZipLong LFH_SIG
          local file header signature
static int STORED
          Compression method for deflated entries.
 
Fields inherited from class java.io.FilterOutputStream
out
 
Constructor Summary
ZipOutputStream(java.io.File file)
          Creates a new ZIP OutputStream writing to a File.
ZipOutputStream(java.io.OutputStream out)
          Creates a new ZIP OutputStream filtering the underlying stream.
 
Method Summary
 void close()
          Closes this output stream and releases any system resources associated with the stream.
 void closeEntry()
          Writes all necessary data for this entry.
protected  void deflate()
          Writes next block of compressed data to the output stream.
 void finish()
          Finishs writing the contents and closes this as well as the underlying stream.
 void flush()
          Flushes this output stream and forces any buffered output bytes to be written out to the 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.
 boolean isSeekable()
          This method indicates whether this archive is writing to a seekable stream (i.e., to a random access file).
 void putNextEntry(ZipEntry ze)
          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[] b, int offset, int length)
          Writes bytes to ZIP entry.
 void write(int b)
          Writes a single byte to ZIP entry.
protected  void writeCentralDirectoryEnd()
          Writes the "End of central dir record"
protected  void writeCentralFileHeader(ZipEntry ze)
          Writes the central file header entry
protected  void writeDataDescriptor(ZipEntry ze)
          Writes the data descriptor entry
protected  void writeLocalFileHeader(ZipEntry ze)
          Writes the local file header entry
protected  void writeOut(byte[] data)
          Write bytes to output or random access file
protected  void writeOut(byte[] data, int offset, int length)
          Write bytes to output or random access file
 
Methods inherited from class java.io.FilterOutputStream
write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

def

protected java.util.zip.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 DeflaterOutputStream up to Revision 1.13.

Since:
1.14

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 DeflaterOutputStream up to Revision 1.13.

Since:
1.14

DEFLATED

public static final int DEFLATED
Compression method for deflated entries.

Since:
1.1
See Also:
Constant Field Values

STORED

public static final int STORED
Compression method for deflated entries.

Since:
1.1
See Also:
Constant Field Values

LFH_SIG

protected static final ZipLong LFH_SIG
local file header signature

Since:
1.1

DD_SIG

protected static final ZipLong DD_SIG
data descriptor signature

Since:
1.1

CFH_SIG

protected static final ZipLong CFH_SIG
central file header signature

Since:
1.1

EOCD_SIG

protected static final ZipLong EOCD_SIG
end of central dir signature

Since:
1.1
Constructor Detail

ZipOutputStream

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

Since:
1.1

ZipOutputStream

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

Throws:
java.io.IOException
Since:
1.14
Method Detail

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 putNextEntry(org.codehaus.plexus.archiver.zip.ZipEntry).

Since:
1.17

setEncoding

public void setEncoding(java.lang.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

getEncoding

public java.lang.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

finish

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

Throws:
java.io.IOException
Since:
1.1

closeEntry

public void closeEntry()
                throws java.io.IOException
Writes all necessary data for this entry.

Throws:
java.io.IOException
Since:
1.1

putNextEntry

public void putNextEntry(ZipEntry ze)
                  throws java.io.IOException
Begin writing next entry.

Throws:
java.io.IOException
Since:
1.1

setComment

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

Since:
1.1

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

write

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

Overrides:
write in class java.io.FilterOutputStream
Throws:
java.io.IOException

write

public void write(int b)
           throws java.io.IOException
Writes a single byte to ZIP entry.

Delegates to the three arg method.

Overrides:
write in class java.io.FilterOutputStream
Throws:
java.io.IOException
Since:
1.14

close

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

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.FilterOutputStream
Throws:
java.io.IOException - if an I/O error occurs.
Since:
1.14

flush

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

Specified by:
flush in interface java.io.Flushable
Overrides:
flush in class java.io.FilterOutputStream
Throws:
java.io.IOException - if an I/O error occurs.
Since:
1.14

deflate

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

Throws:
java.io.IOException
Since:
1.14

writeLocalFileHeader

protected void writeLocalFileHeader(ZipEntry ze)
                             throws java.io.IOException
Writes the local file header entry

Throws:
java.io.IOException
Since:
1.1

writeDataDescriptor

protected void writeDataDescriptor(ZipEntry ze)
                            throws java.io.IOException
Writes the data descriptor entry

Throws:
java.io.IOException
Since:
1.1

writeCentralFileHeader

protected void writeCentralFileHeader(ZipEntry ze)
                               throws java.io.IOException
Writes the central file header entry

Throws:
java.io.IOException
Since:
1.1

writeCentralDirectoryEnd

protected void writeCentralDirectoryEnd()
                                 throws java.io.IOException
Writes the "End of central dir record"

Throws:
java.io.IOException
Since:
1.1

toDosTime

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

Stolen from InfoZip's fileio.c

Since:
1.1

getBytes

protected byte[] getBytes(java.lang.String name)
                   throws java.util.zip.ZipException
Retrieve the bytes for the given String in the encoding set for this Stream.

Throws:
java.util.zip.ZipException
Since:
1.3

writeOut

protected final void writeOut(byte[] data)
                       throws java.io.IOException
Write bytes to output or random access file

Throws:
java.io.IOException
Since:
1.14

writeOut

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

Throws:
java.io.IOException
Since:
1.14


Copyright 2001-2001-2006 Codehaus. All Rights Reserved.