Class CompressionFilter

java.lang.Object
org.apache.mina.common.IoFilterAdapter
org.apache.mina.filter.CompressionFilter
All Implemented Interfaces:
org.apache.mina.common.IoFilter

public class CompressionFilter extends org.apache.mina.common.IoFilterAdapter
An IoFilter which compresses all data using JZlib. Support for the LZW (DLCZ) algorithm is also planned.

This filter only supports compression using the PARTIAL FLUSH method, since that is the only method useful when doing stream level compression.

This filter supports compression/decompression of the input and output channels selectively. It can also be enabled/disabled on the fly.

This filter does not discard the zlib objects, keeping them around for the entire life of the filter. This is because the zlib dictionary needs to be built up over time, which is used during compression and decompression. Over time, as repetitive data is sent over the wire, the compression efficiency steadily increases.

Note that the zlib header is written only once. It is not necessary that the data received after processing by this filter may not be complete due to packet fragmentation.

It goes without saying that the other end of this stream should also have a compatible compressor/decompressor using the same algorithm.

  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.apache.mina.common.IoFilter

    org.apache.mina.common.IoFilter.NextFilter, org.apache.mina.common.IoFilter.WriteRequest
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    The default compression level used.
    static final int
    Max compression level.
    static final int
    Provides the best speed at the price of a low compression ratio.
    static final int
    No compression done on the data.
    static final String
    A flag that allows you to disable compression once.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new instance which compresses outboud data and decompresses inbound data with default compression level.
    CompressionFilter(boolean compressInbound, boolean compressOutbound, int compressionLevel)
    Creates a new instance.
    CompressionFilter(int compressionLevel)
    Creates a new instance which compresses outboud data and decompresses inbound data with the specified compressionLevel.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    filterWrite(org.apache.mina.common.IoFilter.NextFilter nextFilter, org.apache.mina.common.IoSession session, org.apache.mina.common.IoFilter.WriteRequest writeRequest)
     
    boolean
    Returns true if incoming data is being compressed.
    boolean
    Returns true if the filter is compressing data being written.
    void
    messageReceived(org.apache.mina.common.IoFilter.NextFilter nextFilter, org.apache.mina.common.IoSession session, Object message)
     
    void
    onPostRemove(org.apache.mina.common.IoFilterChain parent, String name, org.apache.mina.common.IoFilter.NextFilter nextFilter)
     
    void
    onPreAdd(org.apache.mina.common.IoFilterChain parent, String name, org.apache.mina.common.IoFilter.NextFilter nextFilter)
     
    void
    setCompressInbound(boolean compressInbound)
    Sets if incoming data has to be compressed.
    void
    setCompressOutbound(boolean compressOutbound)
    Set if outgoing data has to be compressed.

    Methods inherited from class org.apache.mina.common.IoFilterAdapter

    destroy, exceptionCaught, filterClose, init, messageSent, onPostAdd, onPreRemove, sessionClosed, sessionCreated, sessionIdle, sessionOpened

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • COMPRESSION_MAX

      public static final int COMPRESSION_MAX
      Max compression level. Will give the highest compression ratio, but will also take more cpu time and is the slowest.
      See Also:
    • COMPRESSION_MIN

      public static final int COMPRESSION_MIN
      Provides the best speed at the price of a low compression ratio.
      See Also:
    • COMPRESSION_NONE

      public static final int COMPRESSION_NONE
      No compression done on the data.
      See Also:
    • COMPRESSION_DEFAULT

      public static final int COMPRESSION_DEFAULT
      The default compression level used. Provides the best balance between speed and compression
      See Also:
    • DISABLE_COMPRESSION_ONCE

      public static final String DISABLE_COMPRESSION_ONCE
      A flag that allows you to disable compression once.
  • Constructor Details

    • CompressionFilter

      public CompressionFilter()
      Creates a new instance which compresses outboud data and decompresses inbound data with default compression level.
    • CompressionFilter

      public CompressionFilter(int compressionLevel)
      Creates a new instance which compresses outboud data and decompresses inbound data with the specified compressionLevel.
      Parameters:
      compressionLevel - the level of compression to be used. Must be one of COMPRESSION_DEFAULT, COMPRESSION_MAX, COMPRESSION_MIN, and COMPRESSION_NONE.
    • CompressionFilter

      public CompressionFilter(boolean compressInbound, boolean compressOutbound, int compressionLevel)
      Creates a new instance.
      Parameters:
      compressInbound - true if data read is to be decompressed
      compressOutbound - true if data written is to be compressed
      compressionLevel - the level of compression to be used. Must be one of COMPRESSION_DEFAULT, COMPRESSION_MAX, COMPRESSION_MIN, and COMPRESSION_NONE.
  • Method Details

    • messageReceived

      public void messageReceived(org.apache.mina.common.IoFilter.NextFilter nextFilter, org.apache.mina.common.IoSession session, Object message) throws Exception
      Specified by:
      messageReceived in interface org.apache.mina.common.IoFilter
      Overrides:
      messageReceived in class org.apache.mina.common.IoFilterAdapter
      Throws:
      Exception
    • filterWrite

      public void filterWrite(org.apache.mina.common.IoFilter.NextFilter nextFilter, org.apache.mina.common.IoSession session, org.apache.mina.common.IoFilter.WriteRequest writeRequest) throws IOException
      Specified by:
      filterWrite in interface org.apache.mina.common.IoFilter
      Overrides:
      filterWrite in class org.apache.mina.common.IoFilterAdapter
      Throws:
      IOException
    • onPreAdd

      public void onPreAdd(org.apache.mina.common.IoFilterChain parent, String name, org.apache.mina.common.IoFilter.NextFilter nextFilter) throws Exception
      Specified by:
      onPreAdd in interface org.apache.mina.common.IoFilter
      Overrides:
      onPreAdd in class org.apache.mina.common.IoFilterAdapter
      Throws:
      Exception
    • isCompressInbound

      public boolean isCompressInbound()
      Returns true if incoming data is being compressed.
    • setCompressInbound

      public void setCompressInbound(boolean compressInbound)
      Sets if incoming data has to be compressed.
    • isCompressOutbound

      public boolean isCompressOutbound()
      Returns true if the filter is compressing data being written.
    • setCompressOutbound

      public void setCompressOutbound(boolean compressOutbound)
      Set if outgoing data has to be compressed.
    • onPostRemove

      public void onPostRemove(org.apache.mina.common.IoFilterChain parent, String name, org.apache.mina.common.IoFilter.NextFilter nextFilter) throws Exception
      Specified by:
      onPostRemove in interface org.apache.mina.common.IoFilter
      Overrides:
      onPostRemove in class org.apache.mina.common.IoFilterAdapter
      Throws:
      Exception