public class TFastFramedTransport extends TTransport
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.Modifier and Type | Class and Description |
---|---|
static class |
TFastFramedTransport.Factory |
Modifier and Type | Field and 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.
|
Constructor and Description |
---|
TFastFramedTransport(TTransport underlying)
Create a new
TFastFramedTransport . |
TFastFramedTransport(TTransport underlying,
int initialBufferCapacity)
Create a new
TFastFramedTransport . |
TFastFramedTransport(TTransport underlying,
int initialBufferCapacity,
int maxLength) |
Modifier and Type | Method and 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.
|
peek, readAll, write
public static final int DEFAULT_BUF_CAPACITY
public static final int DEFAULT_MAX_LENGTH
public TFastFramedTransport(TTransport underlying)
TFastFramedTransport
. Use the defaults
for initial buffer size and max frame length.underlying
- Transport that real reads and writes will go through to.public TFastFramedTransport(TTransport underlying, int initialBufferCapacity)
TFastFramedTransport
. Use the specified
initial buffer capacity and the default max frame length.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.public TFastFramedTransport(TTransport underlying, int initialBufferCapacity, int maxLength)
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.public void close()
TTransport
close
in class TTransport
public boolean isOpen()
TTransport
isOpen
in class TTransport
public void open() throws TTransportException
TTransport
open
in class TTransport
TTransportException
- if the transport could not be openedpublic int read(byte[] buf, int off, int len) throws TTransportException
TTransport
read
in class TTransport
buf
- Array to read intooff
- Index to start reading atlen
- Maximum number of bytes to readTTransportException
- if there was an error reading datapublic void write(byte[] buf, int off, int len) throws TTransportException
TTransport
write
in class TTransport
buf
- The output data bufferoff
- The offset to start writing fromlen
- The number of bytes to writeTTransportException
- if there was an error writing datapublic void consumeBuffer(int len)
TTransport
consumeBuffer
in class TTransport
public void flush() throws TTransportException
TTransport
flush
in class TTransport
TTransportException
- if there was an error writing out data.public byte[] getBuffer()
TTransport
getBuffer
in class TTransport
public int getBufferPosition()
TTransport
getBufferPosition
in class TTransport
public int getBytesRemainingInBuffer()
TTransport
getBytesRemainingInBuffer
in class TTransport