# Class UpgradeServletOutputStream

java.lang.Object
java.io.OutputStream
jakarta.servlet.ServletOutputStream
org.apache.coyote.http11.upgrade.UpgradeServletOutputStream

All Implemented Interfaces:
  `Closeable`, `Flushable`, `AutoCloseable`

public class UpgradeServletOutputStream extends ServletOutputStream

## Constructor Summary

Constructors
Constructor
Description
`UpgradeServletOutputStream(UpgradeProcessorBase processor, SocketWrapperBase<?> socketWrapper, UpgradeInfo upgradeInfo)`

## Method Summary

Modifier and Type
Method
Description
`void`
`close()`
`void`
`flush()`
`final boolean`
`isReady()`
Returns `true` if it is allowable to call any method that may write data (e.g.
`final void`
`setWriteListener(WriteListener listener)`
Sets the `WriteListener` for this `ServletOutputStream` and thereby switches to non-blocking IO.
`void`
`write(byte[] b, int off, int len)`
`void`
`write(int b)`

### Methods inherited from class jakarta.servlet.ServletOutputStream

`print, print, print, print, print, print, print, println, println, println, println, println, println, println, println, write`

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

`nullOutputStream, write`

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

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

## Constructor Details

### UpgradeServletOutputStream

public UpgradeServletOutputStream(UpgradeProcessorBase processor, SocketWrapperBase<?> socketWrapper, UpgradeInfo upgradeInfo)

## Method Details

### isReady

public final boolean isReady()
Description copied from class: `jakarta.servlet.ServletOutputStream`
Returns `true` if it is allowable to call any method that may write data (e.g. `write()`, `print()` or `flush`). In blocking mode, this method will always return `true`, but a subsequent call to a method that writes data may block. In non-blocking mode this method may return `false`, in which case it is illegal to call a method that writes data and an `IllegalStateException` MUST be thrown. When `WriteListener.onWritePossible()` is called, a call to this method that returned `true` is implicit.

If this method returns `false` and a `WriteListener` has been set via `ServletOutputStream.setWriteListener(WriteListener)`, then container will subsequently invoke `WriteListener.onWritePossible()` once a write operation becomes possible without blocking. Other than the initial call, `WriteListener.onWritePossible()` will only be called if and only if this method is called and returns false.

Specified by:
  `isReady` in class `ServletOutputStream`
Returns:
  `true` if data can be written without blocking, otherwise returns `false`.

### setWriteListener

public final void setWriteListener(WriteListener listener)
Description copied from class: `jakarta.servlet.ServletOutputStream`
Sets the `WriteListener` for this `ServletOutputStream` 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:
  `setWriteListener` in class `ServletOutputStream`
Parameters:
  `listener` - The non-blocking IO write listener

### write

public void write(int b) throws IOException

Specified by:
  `write` in class `OutputStream`
Throws:
  `IOException`

### write

public void write(byte[] b, int off, int len) throws IOException

Overrides:
  `write` in class `OutputStream`
Throws:
  `IOException`

### flush

public void flush() throws IOException

Specified by:
  `flush` in interface `Flushable`
Overrides:
  `flush` in class `OutputStream`
Throws:
  `IOException`

### close

public void close() throws IOException
Description copied from class: `jakarta.servlet.ServletOutputStream`

If this method is called when the output stream is in non-blocking mode, it will immediately return with the stream effectively closed, even if the stream contains buffered data that is yet to be written to client. The container will write this data out in the background. If this process fails the `WriteListener.onError(Throwable)` method will be invoked as normal.

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `ServletOutputStream`
Throws:
  `IOException`