# Class ByteArrayServletOutputStream

java.lang.Object
java.io.OutputStream
jakarta.servlet.ServletOutputStream
org.apache.catalina.ssi.ByteArrayServletOutputStream

All Implemented Interfaces:
  `Closeable, Flushable, AutoCloseable`

public class ByteArrayServletOutputStream extends ServletOutputStream
Class that extends ServletOutputStream, used as a wrapper from within `SsiInclude`

See Also:
  - and ByteArrayOutputStream

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final ByteArrayOutputStream`
`buf`
Our buffer to hold the stream.

## Constructor Summary

Constructors
Constructor
Description
`ByteArrayServletOutputStream()`
Construct a new ServletOutputStream.

## Method Summary

Modifier and Type
Method
Description
`boolean`
`isReady()`
Returns `true` if it is allowable to call any method that may write data (e.g.
`void`
`setWriteListener(WriteListener listener)`
Sets the `WriteListener` for this `ServletOutputStream` and thereby switches to non-blocking IO.
`byte[]`
`toByteArray()`
Returns the underlying byte array.
`void`
`write(int b)`
Write to our buffer.

### Methods inherited from class ServletOutputStream

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

### Methods inherited from class OutputStream

`flush, nullOutputStream, write, write`

### Methods inherited from class Object

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

## Field Details

### buf

protected final ByteArrayOutputStream buf
Our buffer to hold the stream.

## Constructor Details

### ByteArrayServletOutputStream

public ByteArrayServletOutputStream()
Construct a new ServletOutputStream.

## Method Details

### toByteArray

public byte[] toByteArray()
Returns the underlying byte array.

Returns:
  the byte array

### write

public void write(int b)
Write to our buffer.

Specified by:
  `write` in class `OutputStream`
Parameters:
  `b` - The parameter to write

### isReady

public 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 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