Class TFastFramedTransport
java.lang.Object
org.apache.thrift.transport.TTransport
org.apache.thrift.transport.layered.TLayeredTransport
org.apache.thrift.transport.layered.TFastFramedTransport
- All Implemented Interfaces:
Closeable
,AutoCloseable
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.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
How big should the default read and write buffers be? -
Constructor Summary
ConstructorsConstructorDescriptionTFastFramedTransport
(TTransport underlying) Create a newTFastFramedTransport
.TFastFramedTransport
(TTransport underlying, int initialBufferCapacity) Create a newTFastFramedTransport
.TFastFramedTransport
(TTransport underlying, int initialBufferCapacity, int maxLength) -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Only clears the read buffer!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[]
Access the protocol's underlying buffer directly.int
Return the index within the underlying buffer that specifies the next spot that should be read from.int
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 org.apache.thrift.transport.layered.TLayeredTransport
checkReadBytesAvailable, getConfiguration, getInnerTransport, updateKnownMessageSize
-
Field Details
-
DEFAULT_BUF_CAPACITY
public static final int DEFAULT_BUF_CAPACITYHow big should the default read and write buffers be?- See Also:
-
-
Constructor Details
-
TFastFramedTransport
Create a newTFastFramedTransport
. 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 newTFastFramedTransport
. 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 interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in classTTransport
-
isOpen
public boolean isOpen()Description copied from class:TTransport
Queries whether the transport is open.- Specified by:
isOpen
in classTTransport
- Returns:
- True if the transport is open.
-
open
Description copied from class:TTransport
Opens the transport for reading/writing.- Specified by:
open
in classTTransport
- Throws:
TTransportException
- if the transport could not be opened
-
read
Description copied from class:TTransport
Reads up to len bytes into buffer buf, starting at offset off.- Specified by:
read
in classTTransport
- Parameters:
buf
- Array to read intooff
- Index to start reading atlen
- Maximum number of bytes to read- Returns:
- The number of bytes actually read
- Throws:
TTransportException
- if there was an error reading data
-
write
Description copied from class:TTransport
Writes up to len bytes from the buffer.- Specified by:
write
in classTTransport
- Parameters:
buf
- The output data bufferoff
- The offset to start writing fromlen
- 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 classTTransport
- Parameters:
len
- the number of bytes to consume from the underlying buffer.
-
clear
Only clears the read buffer!- Throws:
TTransportException
-
flush
Description copied from class:TTransport
Flush any pending data out of a transport buffer.- Overrides:
flush
in classTTransport
- 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 classTTransport
- 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 classTTransport
- 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 classTTransport
- Returns:
- the number of bytes remaining in the underlying buffer.
Returns -1 if this is a non-buffered transport.
-