org.apache.hc.core5.http.impl.io

## Class SessionInputBufferImpl

- java.lang.Object
- - org.apache.hc.core5.http.impl.io.SessionInputBufferImpl

- All Implemented Interfaces:
    SessionInputBuffer

      public class SessionInputBufferImpl
      extends Object
      implements SessionInputBuffer

  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, InputStream)` method of this class treat a lone LF as valid line delimiters in addition to CR-LF required by the HTTP specification.

  Since:
    4.3

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `SessionInputBufferImpl(BasicHttpTransportMetrics metrics, int bufferSize)`
    `SessionInputBufferImpl(BasicHttpTransportMetrics metrics, int bufferSize, int minChunkLimit, int maxLineLen, CharsetDecoder charDecoder)` Creates new instance of SessionInputBufferImpl.
    `SessionInputBufferImpl(int bufferSize)`
    `SessionInputBufferImpl(int bufferSize, CharsetDecoder decoder)`
    `SessionInputBufferImpl(int bufferSize, int maxLineLen)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `available()` Returns available space in the buffer.
    `int` | `capacity()` Returns total capacity of the buffer
    `void` | `clear()`
    `int` | `fillBuffer(InputStream inputStream)`
    `HttpTransportMetrics` | `getMetrics()` Returns `HttpTransportMetrics` for this session buffer.
    `boolean` | `hasBufferedData()`
    `int` | `length()` Returns length data stored in the buffer
    `int` | `read(byte[] b, InputStream inputStream)` 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, InputStream inputStream)` Reads up to `len` bytes of data from the session buffer into an array of bytes.
    `int` | `read(InputStream inputStream)` Reads the next byte of data from this session buffer.
    `int` | `readLine(CharArrayBuffer charBuffer, InputStream inputStream)` 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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### SessionInputBufferImpl

          public SessionInputBufferImpl(BasicHttpTransportMetrics metrics,
                                        int bufferSize,
                                        int minChunkLimit,
                                        int maxLineLen,
                                        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.
        `maxLineLen` - maximum line length.
        `charDecoder` - charDecoder to be used for decoding HTTP protocol elements. If `null` simple type cast will be used for byte to char conversion.

    - #### SessionInputBufferImpl

          public SessionInputBufferImpl(BasicHttpTransportMetrics metrics,
                                        int bufferSize)

    - #### SessionInputBufferImpl

          public SessionInputBufferImpl(int bufferSize,
                                        int maxLineLen)

    - #### SessionInputBufferImpl

          public SessionInputBufferImpl(int bufferSize,
                                        CharsetDecoder decoder)

    - #### SessionInputBufferImpl

          public SessionInputBufferImpl(int bufferSize)

  - ### Method Detail

    - #### capacity

          public int capacity()

      Description copied from interface: `SessionInputBuffer`
      Returns total capacity of the buffer
      Specified by:
        `capacity` in interface `SessionInputBuffer`
      Returns:
        total capacity

    - #### length

          public int length()

      Description copied from interface: `SessionInputBuffer`
      Returns length data stored in the buffer
      Specified by:
        `length` in interface `SessionInputBuffer`
      Returns:
        data length

    - #### available

          public int available()

      Description copied from interface: `SessionInputBuffer`
      Returns available space in the buffer.
      Specified by:
        `available` in interface `SessionInputBuffer`
      Returns:
        available space.

    - #### fillBuffer

          public int fillBuffer(InputStream inputStream)
                         throws IOException

      Throws:
        `IOException`

    - #### hasBufferedData

          public boolean hasBufferedData()

    - #### clear

          public void clear()

    - #### read

          public int read(InputStream inputStream)
                   throws 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`
      Parameters:
        `inputStream` - Input stream
      Returns:
        the next byte of data, or `-1` if the end of the stream is reached.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### read

          public int read(byte[] b,
                          int off,
                          int len,
                          InputStream inputStream)
                   throws 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.

      If `len` is zero, then no bytes are read and 0 is returned.

      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.
        `inputStream` - Input stream
      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:
        `IOException` - if an I/O error occurs.

    - #### read

          public int read(byte[] b,
                          InputStream inputStream)
                   throws 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.
        `inputStream` - Input stream
      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:
        `IOException` - if an I/O error occurs.

    - #### readLine

          public int readLine(CharArrayBuffer charBuffer,
                              InputStream inputStream)
                       throws 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, one line of characters upon return
        `inputStream` - Input stream
      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:
        `IOException` - if an I/O error occurs.

    - #### getMetrics

          public HttpTransportMetrics getMetrics()

      Description copied from interface: `SessionInputBuffer`
      Returns `HttpTransportMetrics` for this session buffer.
      Specified by:
        `getMetrics` in interface `SessionInputBuffer`
      Returns:
        transport metrics.

Copyright © 2005–2021 The Apache Software Foundation. All rights reserved.