net.sf.zipme
Class Inflater

java.lang.Object
  extended bynet.sf.zipme.Inflater

public class Inflater
extends java.lang.Object

Inflater is used to decompress data that has been compressed according to the "deflate" standard described in rfc1950. The usage is as following. First you have to set some input with setInput(), then inflate() it. If inflate doesn't inflate any bytes there may be three reasons:

Once the first output byte is produced, a dictionary will not be needed at a later stage.

Since:
JDK 1.1

Constructor Summary
Inflater()
          Creates a new inflater.
Inflater(boolean nowrap)
          Creates a new inflater.
 
Method Summary
 void end()
          Frees all objects allocated by the inflater.
 boolean finished()
          Returns true, if the inflater has finished.
 int getAdler()
          Gets the adler checksum.
 long getBytesRead()
          Gets the total number of processed compressed input bytes.
 long getBytesWritten()
          Gets the total number of output bytes returned by inflate().
 int getRemaining()
          Gets the number of unprocessed input.
 int getTotalIn()
          Gets the total number of processed compressed input bytes.
 int getTotalOut()
          Gets the total number of output bytes returned by inflate().
 int inflate(byte[] buf)
          Inflates the compressed stream to the output buffer.
 int inflate(byte[] buf, int off, int len)
          Inflates the compressed stream to the output buffer.
 boolean needsDictionary()
          Returns true, if a preset dictionary is needed to inflate the input.
 boolean needsInput()
          Returns true, if the input buffer is empty.
 void reset()
          Resets the inflater so that a new stream can be decompressed.
 void setDictionary(byte[] buffer)
          Sets the preset dictionary.
 void setDictionary(byte[] buffer, int off, int len)
          Sets the preset dictionary.
 void setInput(byte[] buf)
          Sets the input.
 void setInput(byte[] buf, int off, int len)
          Sets the input.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Inflater

public Inflater()
Creates a new inflater.


Inflater

public Inflater(boolean nowrap)
Creates a new inflater.

Parameters:
nowrap - true if no header and checksum field appears in the stream. This is used for GZIPed input. For compatibility with Sun JDK you should provide one byte of input more than needed in this case.
Method Detail

end

public void end()
Frees all objects allocated by the inflater. There's no reason to call this, since you can just rely on garbage collection (even for the Sun implementation). Exists only for compatibility with Sun's JDK, where the compressor allocates native memory. If you call any method (even reset) afterwards the behaviour is undefined.


finished

public boolean finished()
Returns true, if the inflater has finished. This means, that no input is needed and no output can be produced.


getAdler

public int getAdler()
Gets the adler checksum. This is either the checksum of all uncompressed bytes returned by inflate(), or if needsDictionary() returns true (and thus no output was yet produced) this is the adler checksum of the expected dictionary.

Returns:
the adler checksum.

getRemaining

public int getRemaining()
Gets the number of unprocessed input. Useful, if the end of the stream is reached and you want to further process the bytes after the deflate stream.

Returns:
the number of bytes of the input which were not processed.

getTotalIn

public int getTotalIn()
Gets the total number of processed compressed input bytes.

Returns:
the total number of bytes of processed input bytes.

getBytesRead

public long getBytesRead()
Gets the total number of processed compressed input bytes.

Returns:
the total number of bytes of processed input bytes.
Since:
1.5

getTotalOut

public int getTotalOut()
Gets the total number of output bytes returned by inflate().

Returns:
the total number of output bytes.

getBytesWritten

public long getBytesWritten()
Gets the total number of output bytes returned by inflate().

Returns:
the total number of output bytes.
Since:
1.5

inflate

public int inflate(byte[] buf)
            throws DataFormatException
Inflates the compressed stream to the output buffer. If this returns 0, you should check, whether needsDictionary(), needsInput() or finished() returns true, to determine why no further output is produced.

Parameters:
buf - the output buffer.
Returns:
the number of bytes written to the buffer, 0 if no further output can be produced.
Throws:
DataFormatException - if deflated stream is invalid.
java.lang.IllegalArgumentException - if buf has length 0.

inflate

public int inflate(byte[] buf,
                   int off,
                   int len)
            throws DataFormatException
Inflates the compressed stream to the output buffer. If this returns 0, you should check, whether needsDictionary(), needsInput() or finished() returns true, to determine why no further output is produced.

Parameters:
buf - the output buffer.
off - the offset into buffer where the output should start.
len - the maximum length of the output.
Returns:
the number of bytes written to the buffer, 0 if no further output can be produced.
Throws:
DataFormatException - if deflated stream is invalid.
java.lang.IndexOutOfBoundsException - if the off and/or len are wrong.

needsDictionary

public boolean needsDictionary()
Returns true, if a preset dictionary is needed to inflate the input.


needsInput

public boolean needsInput()
Returns true, if the input buffer is empty. You should then call setInput().
NOTE: This method also returns true when the stream is finished.


reset

public void reset()
Resets the inflater so that a new stream can be decompressed. All pending input and output will be discarded.


setDictionary

public void setDictionary(byte[] buffer)
Sets the preset dictionary. This should only be called, if needsDictionary() returns true and it should set the same dictionary, that was used for deflating. The getAdler() function returns the checksum of the dictionary needed.

Parameters:
buffer - the dictionary.
Throws:
java.lang.IllegalStateException - if no dictionary is needed.
java.lang.IllegalArgumentException - if the dictionary checksum is wrong.

setDictionary

public void setDictionary(byte[] buffer,
                          int off,
                          int len)
Sets the preset dictionary. This should only be called, if needsDictionary() returns true and it should set the same dictionary, that was used for deflating. The getAdler() function returns the checksum of the dictionary needed.

Parameters:
buffer - the dictionary.
off - the offset into buffer where the dictionary starts.
len - the length of the dictionary.
Throws:
java.lang.IllegalStateException - if no dictionary is needed.
java.lang.IllegalArgumentException - if the dictionary checksum is wrong.
java.lang.IndexOutOfBoundsException - if the off and/or len are wrong.

setInput

public void setInput(byte[] buf)
Sets the input. This should only be called, if needsInput() returns true.

Parameters:
buf - the input.
Throws:
java.lang.IllegalStateException - if no input is needed.

setInput

public void setInput(byte[] buf,
                     int off,
                     int len)
Sets the input. This should only be called, if needsInput() returns true.

Parameters:
buf - the input.
off - the offset into buffer where the input starts.
len - the length of the input.
Throws:
java.lang.IllegalStateException - if no input is needed.
java.lang.IndexOutOfBoundsException - if the off and/or len are wrong.