DeflaterOutputStreampublic class DeflaterOutputStream extends FilterOutputStream This class implements an output stream filter for compressing data in
the "deflate" compression format. It is also used as the basis for other
types of compression filters, such as GZIPOutputStream. |
Fields Summary |
---|
protected Deflater | defCompressor for this stream. | protected byte[] | bufOutput buffer for writing compressed data. | private boolean | closedIndicates that the stream has been closed. | boolean | usesDefaultDeflater |
Constructors Summary |
---|
public DeflaterOutputStream(OutputStream out, Deflater def, int size)Creates a new output stream with the specified compressor and
buffer size.
super(out);
if (out == null || def == null) {
throw new NullPointerException();
} else if (size <= 0) {
throw new IllegalArgumentException("buffer size <= 0");
}
this.def = def;
buf = new byte[size];
| public DeflaterOutputStream(OutputStream out, Deflater def)Creates a new output stream with the specified compressor and
a default buffer size.
this(out, def, 512);
| public DeflaterOutputStream(OutputStream out)Creates a new output stream with a default compressor and buffer size.
this(out, new Deflater());
usesDefaultDeflater = true;
|
Methods Summary |
---|
public void | close()Writes remaining compressed data to the output stream and closes the
underlying stream.
if (!closed) {
finish();
if (usesDefaultDeflater)
def.end();
out.close();
closed = true;
}
| protected void | deflate()Writes next block of compressed data to the output stream.
int len = def.deflate(buf, 0, buf.length);
if (len > 0) {
out.write(buf, 0, len);
}
| public void | finish()Finishes writing compressed data to the output stream without closing
the underlying stream. Use this method when applying multiple filters
in succession to the same output stream.
if (!def.finished()) {
def.finish();
while (!def.finished()) {
deflate();
}
}
| public void | write(int b)Writes a byte to the compressed output stream. This method will
block until the byte can be written.
byte[] buf = new byte[1];
buf[0] = (byte)(b & 0xff);
write(buf, 0, 1);
| public void | write(byte[] b, int off, int len)Writes an array of bytes to the compressed output stream. This
method will block until all the bytes are written.
if (def.finished()) {
throw new IOException("write beyond end of stream");
}
if ((off | len | (off + len) | (b.length - (off + len))) < 0) {
throw new IndexOutOfBoundsException();
} else if (len == 0) {
return;
}
if (!def.finished()) {
// Deflate no more than stride bytes at a time. This avoids
// excess copying in deflateBytes (see Deflater.c)
int stride = buf.length;
for (int i = 0; i < len; i+= stride) {
def.setInput(b, off + i, Math.min(stride, len - i));
while (!def.needsInput()) {
deflate();
}
}
}
|
|