Package org.simpleframework.transport
Class TransportCursor
java.lang.Object
org.simpleframework.transport.TransportCursor
- All Implemented Interfaces:
ByteCursor
The
TransportCursor
object represents a cursor that
can read and buffer data from an underlying transport. If the
number of bytes read from the cursor is more than required for
the HTTP request then those bytes can be pushed back in to the
cursor using the reset
method. This will only allow
the last read to be reset within the cursor safely.- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate byte[]
This is the buffer used to collect the bytes pushed back.private int
This is the number of bytes that have been pushed back.private int
This is the maximum number of bytes that can be pushed back.private int
This is the mark from the last read from this cursor object.private int
This is the position to read data from the internal buffer.private ByteReader
This is the stream for the bytes read by this cursor object. -
Constructor Summary
ConstructorsConstructorDescriptionTransportCursor
(Transport transport) Constructor for theTransportCursor
object.TransportCursor
(Transport transport, int size) Constructor for theTransportCursor
object. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
expand
(int capacity) This is used to ensure that there is enough space in the buffer to allow for more bytes to be added.boolean
isOpen()
Determines whether the cursor is still open.boolean
isReady()
Determines whether the cursor is ready for reading.void
push
(byte[] data) Pushes the provided data on to the cursor.void
push
(byte[] data, int off, int len) Pushes the provided data on to the cursor.int
read
(byte[] data) Reads a block of bytes from the underlying stream.int
read
(byte[] data, int off, int len) Reads a block of bytes from the underlying stream.int
ready()
Provides the number of bytes that can be read from the stream without blocking.int
reset
(int size) Moves the cursor backward within the stream.
-
Field Details
-
reader
This is the stream for the bytes read by this cursor object. -
buffer
private byte[] bufferThis is the buffer used to collect the bytes pushed back. -
count
private int countThis is the number of bytes that have been pushed back. -
mark
private int markThis is the mark from the last read from this cursor object. -
pos
private int posThis is the position to read data from the internal buffer. -
limit
private int limitThis is the maximum number of bytes that can be pushed back.
-
-
Constructor Details
-
TransportCursor
Constructor for theTransportCursor
object. This requires a transport to read the bytes from. By default this will create a buffer of of the specified size to read the input in to which enabled bytes to be buffered internally.- Parameters:
transport
- this is the underlying transport to use
-
TransportCursor
Constructor for theTransportCursor
object. This requires a transport to read the bytes from. By default this will create a buffer of of the specified size to read the input in to which enabled bytes to be buffered internally.- Parameters:
transport
- this is the underlying transport to usesize
- this is the size of the internal buffer to use
-
-
Method Details
-
isOpen
Determines whether the cursor is still open. The cursor is considered open if there are still bytes to read. If there is still bytes buffered and the underlying transport is closed then the cursor is still considered open.- Specified by:
isOpen
in interfaceByteCursor
- Returns:
- true if there is nothing more to be read from this
- Throws:
IOException
-
isReady
Determines whether the cursor is ready for reading. When the cursor is ready then it guarantees that some amount of bytes can be read from the underlying stream without blocking.- Specified by:
isReady
in interfaceByteCursor
- Returns:
- true if some data can be read without blocking
- Throws:
IOException
-
ready
Provides the number of bytes that can be read from the stream without blocking. This is typically the number of buffered or available bytes within the stream. When this reaches zero then the cursor may perform a blocking read.- Specified by:
ready
in interfaceByteCursor
- Returns:
- the number of bytes that can be read without blocking
- Throws:
IOException
-
read
Reads a block of bytes from the underlying stream. This will read up to the requested number of bytes from the underlying stream. If there are no ready bytes on the stream this can return zero, representing the fact that nothing was read.- Specified by:
read
in interfaceByteCursor
- Parameters:
data
- this is the array to read the bytes in to- Returns:
- this returns the number of bytes read from the stream
- Throws:
IOException
-
read
Reads a block of bytes from the underlying stream. This will read up to the requested number of bytes from the underlying stream. If there are no ready bytes on the stream this can return zero, representing the fact that nothing was read.- Specified by:
read
in interfaceByteCursor
- Parameters:
data
- this is the array to read the bytes in tooff
- this is the offset to begin writing the bytes tolen
- this is the number of bytes that are requested- Returns:
- this returns the number of bytes read from the stream
- Throws:
IOException
-
push
Pushes the provided data on to the cursor. Data pushed on to the cursor will be the next data read from the cursor. This complements thereset
method which will reset the cursors position on a stream. Allowing data to be pushed on to the cursor allows more flexibility.- Specified by:
push
in interfaceByteCursor
- Parameters:
data
- this is the data to be pushed on to the cursor- Throws:
IOException
-
push
Pushes the provided data on to the cursor. Data pushed on to the cursor will be the next data read from the cursor. This complements thereset
method which will reset the cursors position on a stream. Allowing data to be pushed on to the cursor allows more flexibility.- Specified by:
push
in interfaceByteCursor
- Parameters:
data
- this is the data to be pushed on to the cursoroff
- this is the offset to begin reading the byteslen
- this is the number of bytes that are to be used- Throws:
IOException
-
expand
This is used to ensure that there is enough space in the buffer to allow for more bytes to be added. If the buffer is already larger than the required capacity the this will do nothing.- Parameters:
capacity
- the minimum size needed for the buffer- Throws:
IOException
-
reset
Moves the cursor backward within the stream. This ensures that any bytes read from the last read can be pushed back in to the stream so that they can be read again. This will throw an exception if the reset can not be performed.- Specified by:
reset
in interfaceByteCursor
- Parameters:
size
- this is the number of bytes to reset back- Returns:
- this is the number of bytes that have been reset
- Throws:
IOException
-