Class BZip2CompressorOutputStream
- All Implemented Interfaces:
Closeable, Flushable, AutoCloseable
The compression requires large amounts of memory. Thus you should call the
close() method as soon as possible, to force
BZip2CompressorOutputStream to release the allocated memory.
You can shrink the amount of allocated memory and maybe raise the compression speed by choosing a lower block size, which in turn may cause a lower compression ratio. You can avoid unnecessary memory allocation by avoiding using a block size which is bigger than the size of the input.
You can compute the memory usage for compressing by the following formula:
<code>400k + (9 * block size)</code>.
To get the memory required for decompression by BZip2CompressorInputStream use
<code>65k + (5 * block size)</code>.
| Memory usage by block size | ||
|---|---|---|
| Block size | Compression memory usage | Decompression memory usage |
| 100k | 1300k | 565k |
| 200k | 2200k | 1065k |
| 300k | 3100k | 1565k |
| 400k | 4000k | 2065k |
| 500k | 4900k | 2565k |
| 600k | 5800k | 3065k |
| 700k | 6700k | 3565k |
| 800k | 7600k | 4065k |
| 900k | 8500k | 4565k |
For decompression BZip2CompressorInputStream allocates less memory if the bzipped input is smaller than one block.
Instances of this class are not thread safe.
TODO: Update to BZip2 1.0.1
Forked from Apache Commons-Compress with possible changes
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intstatic final intstatic final intThe maximum supported block size == 9.static final intstatic final intstatic final intThe minimum supported block size == 1.static final intstatic final intstatic final intstatic final intstatic final int -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a new BZip2CompressorOutputStream with a block size of 900k.BZip2CompressorOutputStream(OutputStream out, int blockSize) Constructs a new BZip2CompressorOutputStream with specified block size. -
Method Summary
Modifier and TypeMethodDescriptionstatic intchooseBlockSize(long inputLength) Chooses a block size based on the given length of the data to compress.voidclose()voidfinish()voidflush()final intReturns the block size parameter specified at construction time.voidwrite(byte[] buf, int offs, int len) voidwrite(int b) Methods inherited from class OutputStream
nullOutputStream, write
-
Field Details
-
MIN_BLOCK_SIZE
public static final int MIN_BLOCK_SIZEThe minimum supported block size == 1.- See Also:
-
MAX_BLOCK_SIZE
public static final int MAX_BLOCK_SIZEThe maximum supported block size == 9.- See Also:
-
BASE_BLOCK_SIZE
static final int BASE_BLOCK_SIZE- See Also:
-
MAX_ALPHA_SIZE
static final int MAX_ALPHA_SIZE- See Also:
-
MAX_CODE_LEN
static final int MAX_CODE_LEN- See Also:
-
RUNA
static final int RUNA- See Also:
-
RUNB
static final int RUNB- See Also:
-
N_GROUPS
static final int N_GROUPS- See Also:
-
G_SIZE
static final int G_SIZE- See Also:
-
N_ITERS
static final int N_ITERS- See Also:
-
MAX_SELECTORS
static final int MAX_SELECTORS- See Also:
-
NUM_OVERSHOOT_BYTES
static final int NUM_OVERSHOOT_BYTES- See Also:
-
-
Constructor Details
-
BZip2CompressorOutputStream
Constructs a new BZip2CompressorOutputStream with a block size of 900k.- Parameters:
out- the destination stream.- Throws:
IOException- if an I/O error occurs in the specified stream.NullPointerException- ifout == null.
-
BZip2CompressorOutputStream
Constructs a new BZip2CompressorOutputStream with specified block size.- Parameters:
out- the destination stream.blockSize- the blockSize as 100k units.- Throws:
IOException- if an I/O error occurs in the specified stream.IllegalArgumentException- if(blockSize invalid input: '<' 1) || (blockSize > 9).NullPointerException- ifout == null.- See Also:
-
-
Method Details
-
chooseBlockSize
public static int chooseBlockSize(long inputLength) Chooses a block size based on the given length of the data to compress.- Parameters:
inputLength- The length of the data which will be compressed by BZip2CompressorOutputStream.- Returns:
- The block size, between
MIN_BLOCK_SIZEandMAX_BLOCK_SIZEboth inclusive. For a negative inputLength this method returns MAX_BLOCK_SIZE always.
-
write
- Specified by:
writein classOutputStream- Throws:
IOException
-
finish
- Throws:
IOException
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classOutputStream- Throws:
IOException
-
flush
- Specified by:
flushin interfaceFlushable- Overrides:
flushin classOutputStream- Throws:
IOException
-
getBlockSize
public final int getBlockSize()Returns the block size parameter specified at construction time. -
write
- Overrides:
writein classOutputStream- Throws:
IOException
-