public class BZip2CompressorOutputStream extends CompressorOutputStream
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 blocksize, which in turn may cause a lower compression ratio. You can avoid unnecessary memory allocation by avoiding using a blocksize which is bigger than the size of the input.
You can compute the memory usage for compressing by the following formula:
<code>400k + (9 * blocksize)</code>.
To get the memory required for decompression by BZip2CompressorInputStream
use
<code>65k + (5 * blocksize)</code>.
Memory usage by blocksize | ||
---|---|---|
Blocksize | 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 threadsafe.
TODO: Update to BZip2 1.0.1
Modifier and Type | Field and Description |
---|---|
static int |
BASEBLOCKSIZE |
static int |
G_SIZE |
static int |
MAX_ALPHA_SIZE |
static int |
MAX_BLOCKSIZE
The maximum supported blocksize
== 9 . |
static int |
MAX_CODE_LEN |
static int |
MAX_SELECTORS |
static int |
MIN_BLOCKSIZE
The minimum supported blocksize
== 1 . |
static int |
N_GROUPS |
static int |
N_ITERS |
static int |
NUM_OVERSHOOT_BYTES |
static int |
RUNA |
static int |
RUNB |
Constructor and Description |
---|
BZip2CompressorOutputStream(java.io.OutputStream out)
Constructs a new
BZip2CompressorOutputStream with a blocksize of 900k. |
BZip2CompressorOutputStream(java.io.OutputStream out,
int blockSize)
Constructs a new
BZip2CompressorOutputStream with specified blocksize. |
Modifier and Type | Method and Description |
---|---|
static int |
chooseBlockSize(long inputLength)
Chooses a blocksize based on the given length of the data to compress.
|
void |
close() |
void |
finish() |
void |
flush() |
int |
getBlockSize()
Returns the blocksize parameter specified at construction time.
|
void |
write(byte[] buf,
int offs,
int len) |
void |
write(int b) |
public static final int MIN_BLOCKSIZE
== 1
.public static final int MAX_BLOCKSIZE
== 9
.public static final int BASEBLOCKSIZE
public static final int MAX_ALPHA_SIZE
public static final int MAX_CODE_LEN
public static final int RUNA
public static final int RUNB
public static final int N_GROUPS
public static final int G_SIZE
public static final int N_ITERS
public static final int MAX_SELECTORS
public static final int NUM_OVERSHOOT_BYTES
public BZip2CompressorOutputStream(java.io.OutputStream out) throws java.io.IOException
BZip2CompressorOutputStream
with a blocksize of 900k.out
- the destination stream.java.io.IOException
- if an I/O error occurs in the specified stream.java.lang.NullPointerException
- if out == null
.public BZip2CompressorOutputStream(java.io.OutputStream out, int blockSize) throws java.io.IOException
BZip2CompressorOutputStream
with specified blocksize.out
- the destination stream.blockSize
- the blockSize as 100k units.java.io.IOException
- if an I/O error occurs in the specified stream.java.lang.IllegalArgumentException
- if (blockSize < 1) || (blockSize > 9)
.java.lang.NullPointerException
- if out == null
.MIN_BLOCKSIZE
,
MAX_BLOCKSIZE
public static int chooseBlockSize(long inputLength)
inputLength
- The length of the data which will be compressed by
BZip2CompressorOutputStream
.MIN_BLOCKSIZE
and
MAX_BLOCKSIZE
both inclusive. For a negative
inputLength
this method returns MAX_BLOCKSIZE
always.public void write(int b) throws java.io.IOException
write
in class java.io.OutputStream
java.io.IOException
public void finish() throws java.io.IOException
java.io.IOException
public void close() throws java.io.IOException
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
close
in class java.io.OutputStream
java.io.IOException
public void flush() throws java.io.IOException
flush
in interface java.io.Flushable
flush
in class java.io.OutputStream
java.io.IOException
public final int getBlockSize()
public void write(byte[] buf, int offs, int len) throws java.io.IOException
write
in class java.io.OutputStream
java.io.IOException
"Copyright © 2010 - 2020 Adobe Systems Incorporated. All Rights Reserved"