org.apache.coyote.http11.filters

## Class GzipOutputFilter

- java.lang.Object
- - org.apache.coyote.http11.filters.GzipOutputFilter

All Implemented Interfaces:
  OutputFilter, OutputBuffer

    public class GzipOutputFilter
    extends Object
    implements OutputFilter

Gzip output filter.

Author:
  Remy Maucherat

### Nested Class Summary

Nested Classes
`protected class` `GzipOutputFilter.FakeOutputStream`

### Field Summary

Fields
`protected OutputBuffer` `buffer` Next buffer in the pipeline.
`protected GZIPOutputStream` `compressionStream` Compression output stream.
`protected OutputStream` `fakeOutputStream` Fake internal output stream.
`protected static Log` `log` Logger.

### Constructor Summary

Constructors
Constructor and Description
`GzipOutputFilter()`

### Method Summary

Methods
`int` `doWrite(ByteChunk chunk, Response res)` Write some bytes.
`long` `end()` End the current request.
`void` `flush()` Added to allow flushing to happen for the gzip'ed outputstream
`long` `getBytesWritten()` Bytes written to the underlying socket.
`void` `recycle()` Make the filter ready to process the next request.
`void` `setBuffer(OutputBuffer buffer)` Set the next buffer in the filter pipeline.
`void` `setResponse(Response response)` Some filters need additional parameters from the response.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### log

    protected static Log log

Logger.

#### buffer

    protected OutputBuffer buffer

Next buffer in the pipeline.

#### compressionStream

    protected GZIPOutputStream compressionStream

Compression output stream.

#### fakeOutputStream

    protected OutputStream fakeOutputStream

Fake internal output stream.

### Constructor Detail

#### GzipOutputFilter

    public GzipOutputFilter()

### Method Detail

#### doWrite

    public int doWrite(ByteChunk chunk,
              Response res)
                throws IOException

Write some bytes.

Specified by:
  `doWrite` in interface `OutputFilter`
Specified by:
  `doWrite` in interface `OutputBuffer`
Parameters:
  `chunk` - data to write
  `res` - used to allow buffers that can be shared by multiple responses.
Returns:
  number of bytes written by the filter
Throws:
  `IOException`

#### getBytesWritten

    public long getBytesWritten()

Description copied from interface: `OutputBuffer`
Bytes written to the underlying socket. This includes the effects of chunking, compression, etc.

Specified by:
  `getBytesWritten` in interface `OutputBuffer`
Returns:
  Bytes written for the current request

#### flush

    public void flush()

Added to allow flushing to happen for the gzip'ed outputstream

#### setResponse

    public void setResponse(Response response)

Some filters need additional parameters from the response. All the necessary reading can occur in that method, as this method is called after the response header processing is complete.

Specified by:
  `setResponse` in interface `OutputFilter`

#### setBuffer

    public void setBuffer(OutputBuffer buffer)

Set the next buffer in the filter pipeline.

Specified by:
  `setBuffer` in interface `OutputFilter`

#### end

    public long end()
             throws IOException

End the current request. It is acceptable to write extra bytes using buffer.doWrite during the execution of this method.

Specified by:
  `end` in interface `OutputFilter`
Returns:
  Should return 0 unless the filter does some content length delimitation, in which case the number is the amount of extra bytes or missing bytes, which would indicate an error. Note: It is recommended that extra bytes be swallowed by the filter.
Throws:
  `IOException`

#### recycle

    public void recycle()

Make the filter ready to process the next request.

Specified by:
  `recycle` in interface `OutputFilter`