Class TransportReader

java.lang.Object
org.simpleframework.transport.TransportReader
All Implemented Interfaces:
ByteReader

class TransportReader extends Object implements ByteReader
The TransportReader object represents a reader that can read and buffer data from an underlying transport. If the number of bytes read from the reader 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

    Fields
    Modifier and Type
    Field
    Description
    private ByteBuffer
    This is used to store the bytes read from the transport.
    private boolean
    This is used to determine if the transport has been closed.
    private int
    This represents the number of bytes that are ready to read.
    private Transport
    This is the underlying transport to read the bytes from.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor for the TransportReader object.
    TransportReader(Transport transport, int size)
    Constructor for the TransportReader object.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    This is used to close the underlying transport.
    boolean
    Determines whether the source is still open.
    boolean
    Determines whether the source is ready for reading.
    private int
    Provides the number of bytes that can be read from the stream without blocking.
    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
    Provides the number of bytes that can be read from the stream without blocking.
    int
    reset(int size)
    Moves the source backward within the stream.

    Methods inherited from class java.lang.Object

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

    • transport

      private Transport transport
      This is the underlying transport to read the bytes from.
    • buffer

      private ByteBuffer buffer
      This is used to store the bytes read from the transport.
    • closed

      private boolean closed
      This is used to determine if the transport has been closed.
    • count

      private int count
      This represents the number of bytes that are ready to read.
  • Constructor Details

    • TransportReader

      public TransportReader(Transport transport)
      Constructor for the TransportReader object. This requires a transport to read the bytes from. By default this will create a buffer of two kilobytes to read the input in to which ensures several requests can be read at once.
      Parameters:
      transport - this is the underlying transport to use
    • TransportReader

      public TransportReader(Transport transport, int size)
      Constructor for the TransportReader 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
      size - this is the size of the internal buffer to use
  • Method Details

    • isOpen

      public boolean isOpen() throws IOException
      Determines whether the source is still open. The source is considered open if there are still bytes to read. If there is still bytes buffered and the underlying transport is closed then the source is still considered open.
      Specified by:
      isOpen in interface ByteReader
      Returns:
      true if there is nothing more to be read from this
      Throws:
      IOException
    • isReady

      public boolean isReady() throws IOException
      Determines whether the source is ready for reading. When the source is ready then it guarantees that some amount of bytes can be read from the underlying stream without blocking.
      Specified by:
      isReady in interface ByteReader
      Returns:
      true if some data can be read without blocking
      Throws:
      IOException
    • read

      public int read(byte[] data) throws IOException
      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 interface ByteReader
      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

      public int read(byte[] data, int off, int len) throws IOException
      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 interface ByteReader
      Parameters:
      data - this is the array to read the bytes in to
      off - this is the offset to begin writing the bytes to
      len - this is the number of bytes that are requested
      Returns:
      this returns the number of bytes read from the stream
      Throws:
      IOException
    • ready

      public int ready() throws IOException
      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 source may perform a blocking read.
      Specified by:
      ready in interface ByteReader
      Returns:
      the number of bytes that can be read without blocking
      Throws:
      IOException
    • peek

      private int peek() throws IOException
      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 source may perform a blocking read.
      Returns:
      the number of bytes that can be read without blocking
      Throws:
      IOException
    • reset

      public int reset(int size) throws IOException
      Moves the source 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 interface ByteReader
      Parameters:
      size - this is the number of bytes to reset back
      Returns:
      this is the number of bytes that have been reset
      Throws:
      IOException
    • close

      public void close() throws IOException
      This is used to close the underlying transport. This is used when the transport returns a negative value, indicating that the client has closed the connection on the other side. If this is invoked the read method returns -1 and the reader is no longer open, further bytes can no longer be read.
      Throws:
      IOException