Class TFastFramedTransport


  • public class TFastFramedTransport
    extends TTransport
    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 Summary

      Fields 
      Modifier and Type Field Description
      static int DEFAULT_BUF_CAPACITY
      How big should the default read and write buffers be?
      static int DEFAULT_MAX_LENGTH
      How big is the largest allowable frame? Defaults to 16MB.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void close()
      Closes the transport.
      void consumeBuffer​(int len)
      Consume len bytes from the underlying buffer.
      void flush()
      Flush any pending data out of a transport buffer.
      byte[] getBuffer()
      Access the protocol's underlying buffer directly.
      int getBufferPosition()
      Return the index within the underlying buffer that specifies the next spot that should be read from.
      int getBytesRemainingInBuffer()
      Get the number of bytes remaining in the underlying buffer.
      boolean isOpen()
      Queries whether the transport is open.
      void open()
      Opens the transport for reading/writing.
      int read​(byte[] buf, int off, int len)
      Reads up to len bytes into buffer buf, starting at offset off.
      void write​(byte[] buf, int off, int len)
      Writes up to len bytes from the buffer.
      • Methods inherited from class java.lang.Object

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

      • DEFAULT_BUF_CAPACITY

        public static final int DEFAULT_BUF_CAPACITY
        How big should the default read and write buffers be?
        See Also:
        Constant Field Values
      • DEFAULT_MAX_LENGTH

        public static final int DEFAULT_MAX_LENGTH
        How big is the largest allowable frame? Defaults to 16MB.
        See Also:
        Constant Field Values
    • Constructor Detail

      • TFastFramedTransport

        public TFastFramedTransport​(TTransport underlying)
        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.
      • TFastFramedTransport

        public TFastFramedTransport​(TTransport underlying,
                                    int initialBufferCapacity)
        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.
      • TFastFramedTransport

        public TFastFramedTransport​(TTransport underlying,
                                    int initialBufferCapacity,
                                    int maxLength)
        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.
    • Method Detail

      • close

        public void close()
        Description copied from class: TTransport
        Closes the transport.
        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.
      • 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
      • 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.