Class SessionInputBufferImpl

  • All Implemented Interfaces:
    BufferInfo, SessionInputBuffer

    public class SessionInputBufferImpl
    extends java.lang.Object
    implements SessionInputBuffer, BufferInfo
    Abstract base class for session input buffers that stream data from an arbitrary InputStream. This class buffers input data in an internal byte array for optimal input performance.

    readLine(CharArrayBuffer) and readLine() methods of this class treat a lone LF as valid line delimiters in addition to CR-LF required by the HTTP specification.

    Since:
    4.3
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int available()
      Returns available space in the buffer.
      void bind​(java.io.InputStream instream)  
      int capacity()
      Returns total capacity of the buffer
      void clear()  
      int fillBuffer()  
      HttpTransportMetrics getMetrics()
      Returns HttpTransportMetrics for this session buffer.
      boolean hasBufferedData()  
      boolean isBound()  
      boolean isDataAvailable​(int timeout)
      Blocks until some data becomes available in the session buffer or the given timeout period in milliseconds elapses.
      int length()
      Return length data stored in the buffer
      int read()
      Reads the next byte of data from this session buffer.
      int read​(byte[] b)
      Reads some number of bytes from the session buffer and stores them into the buffer array b.
      int read​(byte[] b, int off, int len)
      Reads up to len bytes of data from the session buffer into an array of bytes.
      java.lang.String readLine()
      Reads a complete line of characters up to a line delimiter from this session buffer.
      int readLine​(CharArrayBuffer charbuffer)
      Reads a complete line of characters up to a line delimiter from this session buffer into the given line buffer.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SessionInputBufferImpl

        public SessionInputBufferImpl​(HttpTransportMetricsImpl metrics,
                                      int buffersize,
                                      int minChunkLimit,
                                      MessageConstraints constraints,
                                      java.nio.charset.CharsetDecoder chardecoder)
        Creates new instance of SessionInputBufferImpl.
        Parameters:
        metrics - HTTP transport metrics.
        buffersize - buffer size. Must be a positive number.
        minChunkLimit - size limit below which data chunks should be buffered in memory in order to minimize native method invocations on the underlying network socket. The optimal value of this parameter can be platform specific and defines a trade-off between performance of memory copy operations and that of native method invocation. If negative default chunk limited will be used.
        constraints - Message constraints. If null MessageConstraints.DEFAULT will be used.
        chardecoder - chardecoder to be used for decoding HTTP protocol elements. If null simple type cast will be used for byte to char conversion.
    • Method Detail

      • bind

        public void bind​(java.io.InputStream instream)
      • isBound

        public boolean isBound()
      • capacity

        public int capacity()
        Description copied from interface: BufferInfo
        Returns total capacity of the buffer
        Specified by:
        capacity in interface BufferInfo
        Returns:
        total capacity
      • length

        public int length()
        Description copied from interface: BufferInfo
        Return length data stored in the buffer
        Specified by:
        length in interface BufferInfo
        Returns:
        data length
      • available

        public int available()
        Description copied from interface: BufferInfo
        Returns available space in the buffer.
        Specified by:
        available in interface BufferInfo
        Returns:
        available space.
      • fillBuffer

        public int fillBuffer()
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • hasBufferedData

        public boolean hasBufferedData()
      • clear

        public void clear()
      • read

        public int read()
                 throws java.io.IOException
        Description copied from interface: SessionInputBuffer
        Reads the next byte of data from this session buffer. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
        Specified by:
        read in interface SessionInputBuffer
        Returns:
        the next byte of data, or -1 if the end of the stream is reached.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • read

        public int read​(byte[] b,
                        int off,
                        int len)
                 throws java.io.IOException
        Description copied from interface: SessionInputBuffer
        Reads up to len bytes of data from the session buffer into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer.

        This method blocks until input data is available, end of file is detected, or an exception is thrown.

        If off is negative, or len is negative, or off+len is greater than the length of the array b, then an IndexOutOfBoundsException is thrown.

        Specified by:
        read in interface SessionInputBuffer
        Parameters:
        b - the buffer into which the data is read.
        off - the start offset in array b at which the data is written.
        len - the maximum number of bytes to read.
        Returns:
        the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • read

        public int read​(byte[] b)
                 throws java.io.IOException
        Description copied from interface: SessionInputBuffer
        Reads some number of bytes from the session buffer and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.
        Specified by:
        read in interface SessionInputBuffer
        Parameters:
        b - the buffer into which the data is read.
        Returns:
        the total number of bytes read into the buffer, or -1 is there is no more data because the end of the stream has been reached.
        Throws:
        java.io.IOException - if an I/O error occurs.
      • readLine

        public int readLine​(CharArrayBuffer charbuffer)
                     throws java.io.IOException
        Reads a complete line of characters up to a line delimiter from this session buffer into the given line buffer. The number of chars actually read is returned as an integer. The line delimiter itself is discarded. If no char is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, end of file is detected, or an exception is thrown.

        This method treats a lone LF as a valid line delimiters in addition to CR-LF required by the HTTP specification.

        Specified by:
        readLine in interface SessionInputBuffer
        Parameters:
        charbuffer - the line buffer.
        Returns:
        one line of characters
        Throws:
        java.io.IOException - if an I/O error occurs.
      • readLine

        public java.lang.String readLine()
                                  throws java.io.IOException
        Description copied from interface: SessionInputBuffer
        Reads a complete line of characters up to a line delimiter from this session buffer. The line delimiter itself is discarded. If no char is available because the end of the stream has been reached, null is returned. This method blocks until input data is available, end of file is detected, or an exception is thrown.

        The choice of a char encoding and line delimiter sequence is up to the specific implementations of this interface.

        Specified by:
        readLine in interface SessionInputBuffer
        Returns:
        HTTP line as a string
        Throws:
        java.io.IOException - if an I/O error occurs.
      • isDataAvailable

        public boolean isDataAvailable​(int timeout)
                                throws java.io.IOException
        Description copied from interface: SessionInputBuffer
        Blocks until some data becomes available in the session buffer or the given timeout period in milliseconds elapses. If the timeout value is 0 this method blocks indefinitely.
        Specified by:
        isDataAvailable in interface SessionInputBuffer
        Parameters:
        timeout - in milliseconds.
        Returns:
        true if some data is available in the session buffer or false otherwise.
        Throws:
        java.io.IOException - if an I/O error occurs.