Package org.apache.catalina.connector

## Class CoyoteInputStream

- java.lang.Object
- - java.io.InputStream
  - - javax.servlet.ServletInputStream
    - - org.apache.catalina.connector.CoyoteInputStream

All Implemented Interfaces:
  `java.io.Closeable`, `java.lang.AutoCloseable`

    public class CoyoteInputStream
    extends ServletInputStream

This class handles reading bytes.

Author:
  Remy Maucherat

### Field Summary

Fields
`protected InputBuffer` `ib`
`protected static StringManager` `sm`

### Constructor Summary

Constructors
`protected` `CoyoteInputStream​(InputBuffer ib)`

### Method Summary

All Methods Instance Methods Concrete Methods
`int` `available()`
`protected java.lang.Object` `clone()` Prevent cloning the facade.
`void` `close()` Close the stream Since we re-cycle, we can't allow the call to super.close() which would permanently disable us.
`boolean` `isFinished()` Has the end of this InputStream been reached?
`boolean` `isReady()` Can data be read from this InputStream without blocking?
`int` `read()`
`int` `read​(byte[] b)`
`int` `read​(byte[] b, int off, int len)`
`int` `read​(java.nio.ByteBuffer b)` Transfers bytes from the buffer to the specified ByteBuffer.
`void` `setReadListener​(ReadListener listener)` Sets the `ReadListener` for this `ServletInputStream` and thereby switches to non-blocking IO.

### Methods inherited from class javax.servlet.ServletInputStream

`readLine`

### Methods inherited from class java.io.InputStream

`mark, markSupported, nullInputStream, readAllBytes, readNBytes, readNBytes, reset, skip, transferTo`

### Methods inherited from class java.lang.Object

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

### Field Detail

#### sm

    protected static final StringManager sm

#### ib

    protected InputBuffer ib

### Constructor Detail

#### CoyoteInputStream

    protected CoyoteInputStream​(InputBuffer ib)

### Method Detail

#### clone

    protected java.lang.Object clone()
                              throws java.lang.CloneNotSupportedException

Prevent cloning the facade.

Overrides:
  `clone` in class `java.lang.Object`
Throws:
  `java.lang.CloneNotSupportedException`

#### read

    public int read()
             throws java.io.IOException

Specified by:
  `read` in class `java.io.InputStream`
Throws:
  `java.io.IOException`

#### available

    public int available()
                  throws java.io.IOException

Overrides:
  `available` in class `java.io.InputStream`
Throws:
  `java.io.IOException`

#### read

    public int read​(byte[] b)
             throws java.io.IOException

Overrides:
  `read` in class `java.io.InputStream`
Throws:
  `java.io.IOException`

#### read

    public int read​(byte[] b,
                    int off,
                    int len)
             throws java.io.IOException

Overrides:
  `read` in class `java.io.InputStream`
Throws:
  `java.io.IOException`

#### read

    public int read​(java.nio.ByteBuffer b)
             throws java.io.IOException

Transfers bytes from the buffer to the specified ByteBuffer. After the operation the position of the ByteBuffer will be returned to the one before the operation, the limit will be the position incremented by the number of the transferred bytes.

Parameters:
  `b` - the ByteBuffer into which bytes are to be written.
Returns:
  an integer specifying the actual number of bytes read, or -1 if the end of the stream is reached
Throws:
  `java.io.IOException` - if an input or output exception has occurred

#### close

    public void close()
               throws java.io.IOException

Close the stream Since we re-cycle, we can't allow the call to super.close() which would permanently disable us.

Specified by:
  `close` in interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `java.io.Closeable`
Overrides:
  `close` in class `java.io.InputStream`
Throws:
  `java.io.IOException`

#### isFinished

    public boolean isFinished()

Description copied from class: `javax.servlet.ServletInputStream`
Has the end of this InputStream been reached?

Specified by:
  `isFinished` in class `ServletInputStream`
Returns:
  `true` if all the data has been read from the stream, else `false`

#### isReady

    public boolean isReady()

Description copied from class: `javax.servlet.ServletInputStream`
Can data be read from this InputStream without blocking? Returns If this method is called and returns false, the container will invoke `ReadListener.onDataAvailable()` when data is available.

Specified by:
  `isReady` in class `ServletInputStream`
Returns:
  `true` if data can be read without blocking, else `false`

#### setReadListener

    public void setReadListener​(ReadListener listener)

Description copied from class: `javax.servlet.ServletInputStream`
Sets the `ReadListener` for this `ServletInputStream` and thereby switches to non-blocking IO. It is only valid to switch to non-blocking IO within async processing or HTTP upgrade processing.

Specified by:
  `setReadListener` in class `ServletInputStream`
Parameters:
  `listener` - The non-blocking IO read listener