@deftypemethod Adler32 {public void} reset () 
Resets the Adler32 data checksum as if no update was ever called.
@end deftypemethod
@deftypemethod Adler32 {public void} update (int@w{ }@var{bval}) 
Adds one byte to the data checksum.
@end deftypemethod
@deftypemethod Adler32 {public void} update (byte[]@w{ }@var{buffer}) 
Adds the complete byte array to the data checksum.
@end deftypemethod
@deftypemethod Adler32 {public void} update (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 
Adds the byte array to the data checksum.
@end deftypemethod
@deftypemethod Adler32 {public long} getValue () 
Returns the Adler32 data checksum computed so far.
@end deftypemethod
@deftypemethod CheckedInputStream {public Checksum} getChecksum () 
Returns the Checksum object used. To get the data checksum computed so
 far call @code{getChecksum.getValue()}.
@end deftypemethod
@deftypemethod CheckedInputStream {public int} read () @*throws IOException
Reads one byte, updates the checksum and returns the read byte
 (or -1 when the end of file was reached).
@end deftypemethod
@deftypemethod CheckedInputStream {public int} read (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException
Reads at most len bytes in the supplied buffer and updates the checksum
 with it. Returns the number of bytes actually read or -1 when the end
 of file was reached.
@end deftypemethod
@deftypemethod CheckedInputStream {public long} skip (long@w{ }@var{n}) @*throws IOException
Skips n bytes by reading them in a temporary buffer and updating the
 the checksum with that buffer. Returns the actual number of bytes skiped
 which can be less then requested when the end of file is reached.
@end deftypemethod
@deftypemethod CheckedOutputStream {public Checksum} getChecksum () 
Returns the Checksum object used. To get the data checksum computed so
 far call @code{getChecksum.getValue()}.
@end deftypemethod
@deftypemethod CheckedOutputStream {public void} write (int@w{ }@var{bval}) @*throws IOException
Writes one byte to the OutputStream and updates the Checksum.
@end deftypemethod
@deftypemethod CheckedOutputStream {public void} write (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException
Writes the byte array to the OutputStream and updates the Checksum.
@end deftypemethod
@deftypemethod Checksum {public long} getValue () 
Returns the data checksum computed so far.
@end deftypemethod
@deftypemethod Checksum {public void} reset () 
Resets the data checksum as if no update was ever called.
@end deftypemethod
@deftypemethod Checksum {public void} update (int@w{ }@var{bval}) 
Adds one byte to the data checksum.
@end deftypemethod
@deftypemethod Checksum {public void} update (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 
Adds the byte array to the data checksum.
@end deftypemethod
@deftypemethod CRC32 {public long} getValue () 
Returns the CRC32 data checksum computed so far.
@end deftypemethod
@deftypemethod CRC32 {public void} reset () 
Resets the CRC32 data checksum as if no update was ever called.
@end deftypemethod
@deftypemethod CRC32 {public void} update (int@w{ }@var{bval}) 

@end deftypemethod
@deftypemethod CRC32 {public void} update (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 
Adds the byte array to the data checksum.
@end deftypemethod
@deftypemethod CRC32 {public void} update (byte[]@w{ }@var{buf}) 
Adds the complete byte array to the data checksum.
@end deftypemethod
@deftypemethod Deflater {public int} deflate (byte[]@w{ }@var{buf}) 

@end deftypemethod
@deftypemethod Deflater {public native int} deflate (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 

@end deftypemethod
@deftypemethod Deflater {public native void} end () 

@end deftypemethod
@deftypemethod Deflater {protected void} finalize () 

@end deftypemethod
@deftypemethod Deflater {public native void} finish () 

@end deftypemethod
@deftypemethod Deflater {public synchronized boolean} finished () 

@end deftypemethod
@deftypemethod Deflater {public native int} getAdler () 

@end deftypemethod
@deftypemethod Deflater {public native int} getTotalIn () 

@end deftypemethod
@deftypemethod Deflater {public native int} getTotalOut () 

@end deftypemethod
@deftypemethod Deflater {public native boolean} needsInput () 

@end deftypemethod
@deftypemethod Deflater {public native void} reset () 

@end deftypemethod
@deftypemethod Deflater {public void} setDictionary (byte[]@w{ }@var{buf}) 

@end deftypemethod
@deftypemethod Deflater {public native void} setDictionary (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 

@end deftypemethod
@deftypemethod Deflater {public void} setInput (byte[]@w{ }@var{buf}) 

@end deftypemethod
@deftypemethod Deflater {public native void} setInput (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 

@end deftypemethod
@deftypemethod Deflater {public synchronized void} setLevel (int@w{ }@var{lvl}) 

@end deftypemethod
@deftypemethod Deflater {public synchronized void} setStrategy (int@w{ }@var{stgy}) 

@end deftypemethod
@deftypemethod DeflaterOutputStream {public void} close () @*throws IOException

@end deftypemethod
@deftypemethod DeflaterOutputStream {protected void} deflate () @*throws IOException

@end deftypemethod
@deftypemethod DeflaterOutputStream {public void} finish () @*throws IOException

@end deftypemethod
@deftypemethod DeflaterOutputStream {public void} write (int@w{ }@var{bval}) @*throws IOException

@end deftypemethod
@deftypemethod DeflaterOutputStream {public void} write (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException

@end deftypemethod
@deftypemethod GZIPInputStream {public void} close () @*throws IOException

@end deftypemethod
@deftypemethod GZIPInputStream {public int} read (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException

@end deftypemethod
@deftypemethod GZIPOutputStream {public void} close () @*throws IOException

@end deftypemethod
@deftypemethod GZIPOutputStream {public void} finish () @*throws IOException

@end deftypemethod
@deftypemethod GZIPOutputStream {public synchronized void} write (byte[]@w{ }@var{buf}) @*throws IOException

@end deftypemethod
@deftypemethod GZIPOutputStream {public synchronized void} write (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException

@end deftypemethod
@deftypemethod InflaterInputStream {protected void} fill () @*throws IOException

@end deftypemethod
@deftypemethod InflaterInputStream {public int} read () @*throws IOException

@end deftypemethod
@deftypemethod InflaterInputStream {public int} read (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException

@end deftypemethod
@deftypemethod InflaterInputStream {public void} close () @*throws IOException

@end deftypemethod
@deftypemethod InflaterInputStream {public int} available () @*throws IOException

@end deftypemethod
@deftypemethod InflaterInputStream {public long} skip (long@w{ }@var{n}) @*throws IOException

@end deftypemethod
@deftypemethod Inflater {public native void} end () 

@end deftypemethod
@deftypemethod Inflater {protected void} finalize () 

@end deftypemethod
@deftypemethod Inflater {public synchronized boolean} finished () 

@end deftypemethod
@deftypemethod Inflater {public native int} getAdler () 

@end deftypemethod
@deftypemethod Inflater {public native int} getRemaining () 

@end deftypemethod
@deftypemethod Inflater {public native int} getTotalIn () 

@end deftypemethod
@deftypemethod Inflater {public native int} getTotalOut () 

@end deftypemethod
@deftypemethod Inflater {public int} inflate (byte[]@w{ }@var{buf}) @*throws DataFormatException

@end deftypemethod
@deftypemethod Inflater {public native int} inflate (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws DataFormatException

@end deftypemethod
@deftypemethod Inflater {public synchronized boolean} needsDictionary () 

@end deftypemethod
@deftypemethod Inflater {public synchronized boolean} needsInput () 

@end deftypemethod
@deftypemethod Inflater {public native void} reset () 

@end deftypemethod
@deftypemethod Inflater {public void} setDictionary (byte[]@w{ }@var{buf}) 

@end deftypemethod
@deftypemethod Inflater {public native void} setDictionary (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 

@end deftypemethod
@deftypemethod Inflater {public void} setInput (byte[]@w{ }@var{buf}) 

@end deftypemethod
@deftypemethod Inflater {public native void} setInput (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) 

@end deftypemethod
@deftypemethod ZipEntry {public Object} clone () 
Creates a clone of this ZipEntry. Calls @code{new ZipEntry (this)}
 and creates a clone of the contents of the extra byte array field.
@end deftypemethod
@deftypemethod ZipEntry {public String} getComment () 

@end deftypemethod
@deftypemethod ZipEntry {public long} getCompressedSize () 

@end deftypemethod
@deftypemethod ZipEntry {public long} getCrc () 

@end deftypemethod
@deftypemethod ZipEntry {public byte} getExtra () 

@end deftypemethod
@deftypemethod ZipEntry {public int} getMethod () 

@end deftypemethod
@deftypemethod ZipEntry {public String} getName () 

@end deftypemethod
@deftypemethod ZipEntry {public long} getSize () 

@end deftypemethod
@deftypemethod ZipEntry {public long} getTime () 

@end deftypemethod
@deftypemethod ZipEntry {public boolean} isDirectory () 

@end deftypemethod
@deftypemethod ZipEntry {public void} setComment (java.lang.String@w{ }@var{comment}) 

@end deftypemethod
@deftypemethod ZipEntry {public void} setCompressedSize (long@w{ }@var{compressedSize}) 
Sets the compressedSize of this ZipEntry.
 The new size must be between 0 and 0xffffffffL.
@end deftypemethod
@deftypemethod ZipEntry {public void} setCrc (long@w{ }@var{crc}) 

@end deftypemethod
@deftypemethod ZipEntry {public void} setExtra (byte[]@w{ }@var{extra}) 

@end deftypemethod
@deftypemethod ZipEntry {public void} setMethod (int@w{ }@var{method}) 

@end deftypemethod
@deftypemethod ZipEntry {public void} setSize (long@w{ }@var{size}) 

@end deftypemethod
@deftypemethod ZipEntry {public void} setTime (long@w{ }@var{time}) 

@end deftypemethod
@deftypemethod ZipEntry {public String} toString () 

@end deftypemethod
@deftypemethod ZipEntry {public int} hashCode () 
Returns the hashcode of the name of this ZipEntry.
@end deftypemethod
@deftypemethod ZipFile {public Enumeration} entries () 

@end deftypemethod
@deftypemethod ZipFile {public void} close () @*throws IOException

@end deftypemethod
@deftypemethod ZipFile {public ZipEntry} getEntry (java.lang.String@w{ }@var{name}) 

@end deftypemethod
@deftypemethod ZipFile {public InputStream} getInputStream (java.util.zip.ZipEntry@w{ }@var{ze}) @*throws IOException

@end deftypemethod
@deftypemethod ZipFile {public String} getName () 

@end deftypemethod
@deftypemethod ZipFile {public int} size () 
Returns the number of entries in this ZipFile.
@end deftypemethod
@deftypemethod ZipFile {protected void} finalize () @*throws IOException

@end deftypemethod
@deftypemethod ZipInputStream {public ZipEntry} getNextEntry () @*throws IOException

@end deftypemethod
@deftypemethod ZipInputStream {protected void} fill () @*throws IOException

@end deftypemethod
@deftypemethod ZipInputStream {protected ZipEntry} createZipEntry (java.lang.String@w{ }@var{name}) 
Creates a new ZipEntry with the given name.
 Used by ZipInputStream when normally @code{new ZipEntry (name)}
 would be called. This gives subclasses such as JarInputStream a change
 to override this method and add aditional information to the ZipEntry
 (subclass).
@end deftypemethod
@deftypemethod ZipInputStream {public int} read (byte[]@w{ }@var{b}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException

@end deftypemethod
@deftypemethod ZipInputStream {public long} skip (long@w{ }@var{n}) @*throws IOException

@end deftypemethod
@deftypemethod ZipInputStream {public int} available () 
Returns 0 if the ZipInputStream is closed and 1 otherwise.
@end deftypemethod
@deftypemethod ZipInputStream {public void} closeEntry () @*throws IOException

@end deftypemethod
@deftypemethod ZipInputStream {public void} close () @*throws IOException
Closes this InflaterInputStream.
@end deftypemethod
@deftypemethod ZipOutputStream {public void} close () @*throws IOException

@end deftypemethod
@deftypemethod ZipOutputStream {public void} closeEntry () @*throws IOException

@end deftypemethod
@deftypemethod ZipOutputStream {public void} finish () @*throws IOException

@end deftypemethod
@deftypemethod ZipOutputStream {public void} putNextEntry (java.util.zip.ZipEntry@w{ }@var{entry}) @*throws IOException

@end deftypemethod
@deftypemethod ZipOutputStream {public void} setLevel (int@w{ }@var{level}) 

@end deftypemethod
@deftypemethod ZipOutputStream {public void} setMethod (int@w{ }@var{method}) 

@end deftypemethod
@deftypemethod ZipOutputStream {public void} setComment (java.lang.String@w{ }@var{comment}) 

@end deftypemethod
@deftypemethod ZipOutputStream {public synchronized void} write (byte[]@w{ }@var{buf}, int@w{ }@var{off}, int@w{ }@var{len}) @*throws IOException

@end deftypemethod
