Class TFastFramedTransport

All Implemented Interfaces:
Closeable, AutoCloseable

public class TFastFramedTransport extends TLayeredTransport
This transport is wire compatible with TFramedTransport, but makes use of reusable, expanding read and write buffers in order to avoid allocating new byte[]s all the time. Since the buffers only expand, you should probably only use this transport if your messages are not too variably large, unless the persistent memory cost is not an issue.

This implementation is NOT threadsafe.

  • Field Details

    • DEFAULT_BUF_CAPACITY

      public static final int DEFAULT_BUF_CAPACITY
      How big should the default read and write buffers be?
      See Also:
  • Constructor Details

    • TFastFramedTransport

      public TFastFramedTransport(TTransport underlying) throws TTransportException
      Create a new TFastFramedTransport. Use the defaults for initial buffer size and max frame length.
      Parameters:
      underlying - Transport that real reads and writes will go through to.
      Throws:
      TTransportException
    • TFastFramedTransport

      public TFastFramedTransport(TTransport underlying, int initialBufferCapacity) throws TTransportException
      Create a new TFastFramedTransport. Use the specified initial buffer capacity and the default max frame length.
      Parameters:
      underlying - Transport that real reads and writes will go through to.
      initialBufferCapacity - The initial size of the read and write buffers. In practice, it's not critical to set this unless you know in advance that your messages are going to be very large.
      Throws:
      TTransportException
    • TFastFramedTransport

      public TFastFramedTransport(TTransport underlying, int initialBufferCapacity, int maxLength) throws TTransportException
      Parameters:
      underlying - Transport that real reads and writes will go through to.
      initialBufferCapacity - The initial size of the read and write buffers. In practice, it's not critical to set this unless you know in advance that your messages are going to be very large. (You can pass TFramedTransportWithReusableBuffer.DEFAULT_BUF_CAPACITY if you're only using this constructor because you want to set the maxLength.)
      maxLength - The max frame size you are willing to read. You can use this parameter to limit how much memory can be allocated.
      Throws:
      TTransportException
  • Method Details

    • close

      public void close()
      Description copied from class: TTransport
      Closes the transport.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class TTransport
    • isOpen

      public boolean isOpen()
      Description copied from class: TTransport
      Queries whether the transport is open.
      Specified by:
      isOpen in class TTransport
      Returns:
      True if the transport is open.
    • open

      public void open() throws TTransportException
      Description copied from class: TTransport
      Opens the transport for reading/writing.
      Specified by:
      open in class TTransport
      Throws:
      TTransportException - if the transport could not be opened
    • read

      public int read(byte[] buf, int off, int len) throws TTransportException
      Description copied from class: TTransport
      Reads up to len bytes into buffer buf, starting at offset off.
      Specified by:
      read in class TTransport
      Parameters:
      buf - Array to read into
      off - Index to start reading at
      len - Maximum number of bytes to read
      Returns:
      The number of bytes actually read
      Throws:
      TTransportException - if there was an error reading data
    • write

      public void write(byte[] buf, int off, int len) throws TTransportException
      Description copied from class: TTransport
      Writes up to len bytes from the buffer.
      Specified by:
      write in class TTransport
      Parameters:
      buf - The output data buffer
      off - The offset to start writing from
      len - The number of bytes to write
      Throws:
      TTransportException - if there was an error writing data
    • consumeBuffer

      public void consumeBuffer(int len)
      Description copied from class: TTransport
      Consume len bytes from the underlying buffer.
      Overrides:
      consumeBuffer in class TTransport
      Parameters:
      len - the number of bytes to consume from the underlying buffer.
    • clear

      public void clear() throws TTransportException
      Only clears the read buffer!
      Throws:
      TTransportException
    • flush

      public void flush() throws TTransportException
      Description copied from class: TTransport
      Flush any pending data out of a transport buffer.
      Overrides:
      flush in class TTransport
      Throws:
      TTransportException - if there was an error writing out data.
    • getBuffer

      public byte[] getBuffer()
      Description copied from class: TTransport
      Access the protocol's underlying buffer directly. If this is not a buffered transport, return null.
      Overrides:
      getBuffer in class TTransport
      Returns:
      protocol's Underlying buffer
    • getBufferPosition

      public int getBufferPosition()
      Description copied from class: TTransport
      Return the index within the underlying buffer that specifies the next spot that should be read from.
      Overrides:
      getBufferPosition in class TTransport
      Returns:
      index within the underlying buffer that specifies the next spot that should be read from
    • getBytesRemainingInBuffer

      public int getBytesRemainingInBuffer()
      Description copied from class: TTransport
      Get the number of bytes remaining in the underlying buffer. Returns -1 if this is a non-buffered transport.
      Overrides:
      getBytesRemainingInBuffer in class TTransport
      Returns:
      the number of bytes remaining in the underlying buffer.
      Returns -1 if this is a non-buffered transport.