org.apache.tools.bzip2

## Class CBZip2InputStream

- java.lang.Object
- - java.io.InputStream
  - - org.apache.tools.bzip2.CBZip2InputStream

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, BZip2Constants

      public class CBZip2InputStream
      extends java.io.InputStream
      implements BZip2Constants

  An input stream that decompresses from the BZip2 format (without the file header chars) to be read as any other stream.

  The decompression requires large amounts of memory. Thus you should call the `close()` method as soon as possible, to force `CBZip2InputStream` to release the allocated memory. See `CBZip2OutputStream` for information about memory usage.

  `CBZip2InputStream` reads bytes from the compressed source stream via the single byte `read()` method exclusively. Thus you should consider to use a buffered source stream.

  Instances of this class are not threadsafe.

- - ### Field Summary

    - ### Fields inherited from interface org.apache.tools.bzip2.BZip2Constants

      `baseBlockSize, G_SIZE, MAX_ALPHA_SIZE, MAX_CODE_LEN, MAX_SELECTORS, N_GROUPS, N_ITERS, NUM_OVERSHOOT_BYTES, rNums, RUNA, RUNB`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CBZip2InputStream(java.io.InputStream in)` Constructs a new CBZip2InputStream which decompresses bytes read from the specified stream.
    `CBZip2InputStream(java.io.InputStream in, boolean decompressConcatenated)` Constructs a new CBZip2InputStream which decompresses bytes read from the specified stream.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `int` | `read()`
    `int` | `read(byte[] dest, int offs, int len)`

    - ### Methods inherited from class java.io.InputStream

      `available, mark, markSupported, read, reset, skip`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### CBZip2InputStream

          public CBZip2InputStream(java.io.InputStream in)
                            throws java.io.IOException

      Constructs a new CBZip2InputStream which decompresses bytes read from the specified stream. This doesn't suppprt decompressing concatenated .bz2 files.

      Although BZip2 headers are marked with the magic `"Bz"` this constructor expects the next byte in the stream to be the first one after the magic. Thus callers have to skip the first two bytes. Otherwise this constructor will throw an exception.

      Throws:
        `java.io.IOException` - if the stream content is malformed or an I/O error occurs.
        `java.lang.NullPointerException` - if `in == null`

    - #### CBZip2InputStream

          public CBZip2InputStream(java.io.InputStream in,
                           boolean decompressConcatenated)
                            throws java.io.IOException

      Constructs a new CBZip2InputStream which decompresses bytes read from the specified stream.

      Although BZip2 headers are marked with the magic `"Bz"` this constructor expects the next byte in the stream to be the first one after the magic. Thus callers have to skip the first two bytes. Otherwise this constructor will throw an exception.

      Parameters:
        `in` - the InputStream from which this object should be created
        `decompressConcatenated` - if true, decompress until the end of the input; if false, stop after the first .bz2 stream and leave the input position to point to the next byte after the .bz2 stream
      Throws:
        `java.io.IOException` - if the stream content is malformed or an I/O error occurs.
        `java.lang.NullPointerException` - if `in == null`

  - ### Method Detail

    - #### read

          public int read()
                   throws java.io.IOException

      Specified by:
        `read` in class `java.io.InputStream`
      Throws:
        `java.io.IOException`

    - #### read

          public int read(byte[] dest,
                 int offs,
                 int len)
                   throws java.io.IOException

      Overrides:
        `read` in class `java.io.InputStream`
      Throws:
        `java.io.IOException`

    - #### close

          public void close()
                     throws java.io.IOException

      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Overrides:
        `close` in class `java.io.InputStream`
      Throws:
        `java.io.IOException`