org.apache.commons.compress.compressors.bzip2
Class BZip2CompressorInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by org.apache.commons.compress.compressors.CompressorInputStream
          extended by org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream
All Implemented Interfaces:
java.io.Closeable, BZip2Constants

public class BZip2CompressorInputStream
extends CompressorInputStream
implements BZip2Constants

An input stream that decompresses from the BZip2 format to be read as any other stream.


Nested Class Summary
private static class BZip2CompressorInputStream.Data
           
 
Field Summary
private  boolean blockRandomised
           
private  int blockSize100k
          always: in the range 0 ..
private  int bsBuff
           
private  int bsLive
           
private  int computedBlockCRC
           
private  int computedCombinedCRC
           
private  CRC crc
           
private  int currentChar
           
private  int currentState
           
private  BZip2CompressorInputStream.Data data
          All memory intensive stuff.
private static int EOF
           
private  java.io.InputStream in
           
private  int last
          Index of the last char in the block, so the block size == last + 1.
private  int nInUse
           
private static int NO_RAND_PART_A_STATE
           
private static int NO_RAND_PART_B_STATE
           
private static int NO_RAND_PART_C_STATE
           
private  int origPtr
          Index in zptr[] of original string after sorting.
private static int RAND_PART_A_STATE
           
private static int RAND_PART_B_STATE
           
private static int RAND_PART_C_STATE
           
private static int START_BLOCK_STATE
           
private  int storedBlockCRC
           
private  int storedCombinedCRC
           
private  int su_ch2
           
private  int su_chPrev
           
private  int su_count
           
private  int su_i2
           
private  int su_j2
           
private  int su_rNToGo
           
private  int su_rTPos
           
private  int su_tPos
           
private  char su_z
           
 
Fields inherited from interface org.apache.commons.compress.compressors.bzip2.BZip2Constants
BASEBLOCKSIZE, G_SIZE, MAX_ALPHA_SIZE, MAX_CODE_LEN, MAX_SELECTORS, N_GROUPS, N_ITERS, NUM_OVERSHOOT_BYTES, RUNA, RUNB
 
Constructor Summary
BZip2CompressorInputStream(java.io.InputStream in)
          Constructs a new BZip2CompressorInputStream which decompresses bytes read from the specified stream.
 
Method Summary
private  boolean bsGetBit()
           
private  int bsGetInt()
           
private  char bsGetUByte()
           
private  int bsR(int n)
           
private  void checkMagicChar(char expected, java.lang.String position)
           
 void close()
           
private  void complete()
           
private  void createHuffmanDecodingTables(int alphaSize, int nGroups)
          Called by recvDecodingTables() exclusively.
private  void endBlock()
           
private  void getAndMoveToFrontDecode()
           
private  int getAndMoveToFrontDecode0(int groupNo)
           
private static void hbCreateDecodeTables(int[] limit, int[] base, int[] perm, char[] length, int minLen, int maxLen, int alphaSize)
          Called by createHuffmanDecodingTables() exclusively.
private  void init()
           
private  void initBlock()
           
private  void makeMaps()
           
static boolean matches(byte[] signature, int length)
          Checks if the signature matches what is expected for a bzip2 file.
 int read()
          
 int read(byte[] dest, int offs, int len)
           
private  int read0()
           
private  void recvDecodingTables()
           
private  void setupBlock()
           
private  void setupNoRandPartA()
           
private  void setupNoRandPartB()
           
private  void setupNoRandPartC()
           
private  void setupRandPartA()
           
private  void setupRandPartB()
           
private  void setupRandPartC()
           
 
Methods inherited from class org.apache.commons.compress.compressors.CompressorInputStream
count, count, getBytesRead, getCount
 
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
 

Field Detail

last

private int last
Index of the last char in the block, so the block size == last + 1.


origPtr

private int origPtr
Index in zptr[] of original string after sorting.


blockSize100k

private int blockSize100k
always: in the range 0 .. 9. The current block size is 100000 * this number.


blockRandomised

private boolean blockRandomised

bsBuff

private int bsBuff

bsLive

private int bsLive

crc

private final CRC crc

nInUse

private int nInUse

in

private java.io.InputStream in

currentChar

private int currentChar

EOF

private static final int EOF
See Also:
Constant Field Values

START_BLOCK_STATE

private static final int START_BLOCK_STATE
See Also:
Constant Field Values

RAND_PART_A_STATE

private static final int RAND_PART_A_STATE
See Also:
Constant Field Values

RAND_PART_B_STATE

private static final int RAND_PART_B_STATE
See Also:
Constant Field Values

RAND_PART_C_STATE

private static final int RAND_PART_C_STATE
See Also:
Constant Field Values

NO_RAND_PART_A_STATE

private static final int NO_RAND_PART_A_STATE
See Also:
Constant Field Values

NO_RAND_PART_B_STATE

private static final int NO_RAND_PART_B_STATE
See Also:
Constant Field Values

NO_RAND_PART_C_STATE

private static final int NO_RAND_PART_C_STATE
See Also:
Constant Field Values

currentState

private int currentState

storedBlockCRC

private int storedBlockCRC

storedCombinedCRC

private int storedCombinedCRC

computedBlockCRC

private int computedBlockCRC

computedCombinedCRC

private int computedCombinedCRC

su_count

private int su_count

su_ch2

private int su_ch2

su_chPrev

private int su_chPrev

su_i2

private int su_i2

su_j2

private int su_j2

su_rNToGo

private int su_rNToGo

su_rTPos

private int su_rTPos

su_tPos

private int su_tPos

su_z

private char su_z

data

private BZip2CompressorInputStream.Data data
All memory intensive stuff. This field is initialized by initBlock().

Constructor Detail

BZip2CompressorInputStream

public BZip2CompressorInputStream(java.io.InputStream in)
                           throws java.io.IOException
Constructs a new BZip2CompressorInputStream which decompresses bytes read from the specified 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

makeMaps

private void makeMaps()

read0

private int read0()
           throws java.io.IOException
Throws:
java.io.IOException

init

private void init()
           throws java.io.IOException
Throws:
java.io.IOException

checkMagicChar

private void checkMagicChar(char expected,
                            java.lang.String position)
                     throws java.io.IOException
Throws:
java.io.IOException

initBlock

private void initBlock()
                throws java.io.IOException
Throws:
java.io.IOException

endBlock

private void endBlock()
               throws java.io.IOException
Throws:
java.io.IOException

complete

private void complete()
               throws java.io.IOException
Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.InputStream
Throws:
java.io.IOException

bsR

private int bsR(int n)
         throws java.io.IOException
Throws:
java.io.IOException

bsGetBit

private boolean bsGetBit()
                  throws java.io.IOException
Throws:
java.io.IOException

bsGetUByte

private char bsGetUByte()
                 throws java.io.IOException
Throws:
java.io.IOException

bsGetInt

private int bsGetInt()
              throws java.io.IOException
Throws:
java.io.IOException

hbCreateDecodeTables

private static void hbCreateDecodeTables(int[] limit,
                                         int[] base,
                                         int[] perm,
                                         char[] length,
                                         int minLen,
                                         int maxLen,
                                         int alphaSize)
Called by createHuffmanDecodingTables() exclusively.


recvDecodingTables

private void recvDecodingTables()
                         throws java.io.IOException
Throws:
java.io.IOException

createHuffmanDecodingTables

private void createHuffmanDecodingTables(int alphaSize,
                                         int nGroups)
Called by recvDecodingTables() exclusively.


getAndMoveToFrontDecode

private void getAndMoveToFrontDecode()
                              throws java.io.IOException
Throws:
java.io.IOException

getAndMoveToFrontDecode0

private int getAndMoveToFrontDecode0(int groupNo)
                              throws java.io.IOException
Throws:
java.io.IOException

setupBlock

private void setupBlock()
                 throws java.io.IOException
Throws:
java.io.IOException

setupRandPartA

private void setupRandPartA()
                     throws java.io.IOException
Throws:
java.io.IOException

setupNoRandPartA

private void setupNoRandPartA()
                       throws java.io.IOException
Throws:
java.io.IOException

setupRandPartB

private void setupRandPartB()
                     throws java.io.IOException
Throws:
java.io.IOException

setupRandPartC

private void setupRandPartC()
                     throws java.io.IOException
Throws:
java.io.IOException

setupNoRandPartB

private void setupNoRandPartB()
                       throws java.io.IOException
Throws:
java.io.IOException

setupNoRandPartC

private void setupNoRandPartC()
                       throws java.io.IOException
Throws:
java.io.IOException

matches

public static boolean matches(byte[] signature,
                              int length)
Checks if the signature matches what is expected for a bzip2 file.

Parameters:
signature - the bytes to check
length - the number of bytes to check
Returns:
true, if this stream is a bzip2 compressed stream, false otherwise
Since:
Apache Commons Compress 1.1