# 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 ServletOutputStream

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

  ### Methods inherited from class OutputStream

  `nullOutputStream, write`

  ### Methods inherited from class 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`