FileDocCategorySizeDatePackage
GZIPOutputStream.javaAPI DocJava SE 5 API4945Fri Aug 26 14:57:28 BST 2005java.util.zip

GZIPOutputStream

public class GZIPOutputStream extends DeflaterOutputStream
This class implements a stream filter for writing compressed data in the GZIP file format.
version
1.22, 12/19/03
author
David Connelly

Fields Summary
protected CRC32
crc
CRC-32 of uncompressed data.
private static final int
GZIP_MAGIC
private static final int
TRAILER_SIZE
private static final byte[]
header
Constructors Summary
public GZIPOutputStream(OutputStream out, int size)
Creates a new output stream with the specified buffer size.

param
out the output stream
param
size the output buffer size
exception
IOException If an I/O error has occurred.
exception
IllegalArgumentException if size is <= 0


                                             
           
	super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true), size);
        usesDefaultDeflater = true;
	writeHeader();
	crc.reset();
    
public GZIPOutputStream(OutputStream out)
Creates a new output stream with a default buffer size.

param
out the output stream
exception
IOException If an I/O error has occurred.

	this(out, 512);
    
Methods Summary
public voidfinish()
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.

exception
IOException if an I/O error has occurred

	if (!def.finished()) {
	    def.finish();
	    while (!def.finished()) {
                int len = def.deflate(buf, 0, buf.length);
                if (def.finished() && len <= buf.length - TRAILER_SIZE) {
                    // last deflater buffer. Fit trailer at the end 
                    writeTrailer(buf, len);
                    len = len + TRAILER_SIZE;
                    out.write(buf, 0, len);
                    return;
                }
                if (len > 0)
                    out.write(buf, 0, len);
	    }
            // if we can't fit the trailer at the end of the last
            // deflater buffer, we write it separately
            byte[] trailer = new byte[TRAILER_SIZE];
	    writeTrailer(trailer, 0);
            out.write(trailer);
	}
    
public synchronized voidwrite(byte[] buf, int off, int len)
Writes array of bytes to the compressed output stream. This method will block until all the bytes are written.

param
buf the data to be written
param
off the start offset of the data
param
len the length of the data
exception
IOException If an I/O error has occurred.

	super.write(buf, off, len);
	crc.update(buf, off, len);
    
private voidwriteHeader()


         
        out.write(header);
    
private voidwriteInt(int i, byte[] buf, int offset)

        writeShort(i & 0xffff, buf, offset);
        writeShort((i >> 16) & 0xffff, buf, offset + 2);
    
private voidwriteShort(int s, byte[] buf, int offset)

        buf[offset] = (byte)(s & 0xff);
        buf[offset + 1] = (byte)((s >> 8) & 0xff);
    
private voidwriteTrailer(byte[] buf, int offset)

        writeInt((int)crc.getValue(), buf, offset); // CRC-32 of uncompr. data
        writeInt(def.getTotalIn(), buf, offset + 4); // Number of uncompr. bytes