Package org.apache.catalina.connector

## Class OutputBuffer

- java.lang.Object
- - java.io.Writer
  - - org.apache.catalina.connector.OutputBuffer

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

      public class OutputBuffer
      extends java.io.Writer

  The buffer used by Tomcat response. This is a derivative of the Tomcat 3.3 OutputBuffer, with the removal of some of the state handling (which in Coyote is mostly the Processor's responsibility).
  Author:
    Costin Manolache, Remy Maucherat

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected C2BConverter` | `conv` | Current char to byte converter.
    `static int` | `DEFAULT_BUFFER_SIZE` |

    - ### Fields inherited from class java.io.Writer

      `lock`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `OutputBuffer​(int size)` | Create the buffer with the specified initial size.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `append​(byte[] src, int off, int len)` | Add data to the buffer.
    `void` | `append​(char[] src, int off, int len)` | Add data to the buffer.
    `void` | `append​(java.nio.ByteBuffer from)` |
    `void` | `checkConverter()` |
    `void` | `checkRegisterForWrite()` |
    `void` | `close()` | Close the output buffer.
    `protected void` | `doFlush​(boolean realFlush)` | Flush bytes or chars contained in the buffer.
    `void` | `flush()` | Flush bytes or chars contained in the buffer.
    `int` | `getBufferSize()` |
    `long` | `getContentWritten()` |
    `boolean` | `isBlocking()` |
    `boolean` | `isClosed()` | Is the response output closed ?
    `boolean` | `isNew()` | Has this buffer been used at all?
    `boolean` | `isReady()` |
    `boolean` | `isSuspended()` | Is the response output suspended ?
    `void` | `realWriteBytes​(java.nio.ByteBuffer buf)` | Sends the buffer data to the client output, checking the state of Response and calling the right interceptors.
    `void` | `realWriteChars​(java.nio.CharBuffer from)` | Convert the chars to bytes, then send the data to the client.
    `void` | `recycle()` | Recycle the output buffer.
    `void` | `reset()` |
    `void` | `reset​(boolean resetWriterStreamFlags)` |
    `void` | `setBufferSize​(int size)` |
    `void` | `setResponse​(Response coyoteResponse)` | Associated Coyote response.
    `void` | `setSuspended​(boolean suspended)` | Set the suspended flag.
    `void` | `setWriteListener​(WriteListener listener)` |
    `void` | `write​(byte[] b, int off, int len)` |
    `void` | `write​(char[] c)` |
    `void` | `write​(char[] c, int off, int len)` |
    `void` | `write​(int c)` |
    `void` | `write​(java.lang.String s)` |
    `void` | `write​(java.lang.String s, int off, int len)` | Append a string to the buffer
    `void` | `write​(java.nio.ByteBuffer from)` |
    `void` | `writeByte​(int b)` |

    - ### Methods inherited from class java.io.Writer

      `append, append, append, nullWriter`

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

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

- - ### Field Detail

    - #### DEFAULT_BUFFER_SIZE

          public static final int DEFAULT_BUFFER_SIZE

      See Also:
        Constant Field Values

    - #### conv

          protected C2BConverter conv

      Current char to byte converter.

  - ### Constructor Detail

    - #### OutputBuffer

          public OutputBuffer​(int size)

      Create the buffer with the specified initial size.
      Parameters:
        `size` - Buffer size to use

  - ### Method Detail

    - #### setResponse

          public void setResponse​(Response coyoteResponse)

      Associated Coyote response.
      Parameters:
        `coyoteResponse` - Associated Coyote response

    - #### isSuspended

          public boolean isSuspended()

      Is the response output suspended ?
      Returns:
        suspended flag value

    - #### setSuspended

          public void setSuspended​(boolean suspended)

      Set the suspended flag.
      Parameters:
        `suspended` - New suspended flag value

    - #### isClosed

          public boolean isClosed()

      Is the response output closed ?
      Returns:
        closed flag value

    - #### recycle

          public void recycle()

      Recycle the output buffer.

    - #### close

          public void close()
                     throws java.io.IOException

      Close the output buffer. This tries to calculate the response size if the response has not been committed yet.
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in class `java.io.Writer`
      Throws:
        `java.io.IOException` - An underlying IOException occurred

    - #### flush

          public void flush()
                     throws java.io.IOException

      Flush bytes or chars contained in the buffer.
      Specified by:
        `flush` in interface `java.io.Flushable`
      Specified by:
        `flush` in class `java.io.Writer`
      Throws:
        `java.io.IOException` - An underlying IOException occurred

    - #### doFlush

          protected void doFlush​(boolean realFlush)
                          throws java.io.IOException

      Flush bytes or chars contained in the buffer.
      Parameters:
        `realFlush` - `true` if this should also cause a real network flush
      Throws:
        `java.io.IOException` - An underlying IOException occurred

    - #### realWriteBytes

          public void realWriteBytes​(java.nio.ByteBuffer buf)
                              throws java.io.IOException

      Sends the buffer data to the client output, checking the state of Response and calling the right interceptors.
      Parameters:
        `buf` - the ByteBuffer to be written to the response
      Throws:
        `java.io.IOException` - An underlying IOException occurred

    - #### write

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

      Throws:
        `java.io.IOException`

    - #### write

          public void write​(java.nio.ByteBuffer from)
                     throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### writeByte

          public void writeByte​(int b)
                         throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### realWriteChars

          public void realWriteChars​(java.nio.CharBuffer from)
                              throws java.io.IOException

      Convert the chars to bytes, then send the data to the client.
      Parameters:
        `from` - Char buffer to be written to the response
      Throws:
        `java.io.IOException` - An underlying IOException occurred

    - #### write

          public void write​(int c)
                     throws java.io.IOException

      Overrides:
        `write` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### write

          public void write​(char[] c)
                     throws java.io.IOException

      Overrides:
        `write` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### write

          public void write​(char[] c,
                            int off,
                            int len)
                     throws java.io.IOException

      Specified by:
        `write` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### write

          public void write​(java.lang.String s,
                            int off,
                            int len)
                     throws java.io.IOException

      Append a string to the buffer
      Overrides:
        `write` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### write

          public void write​(java.lang.String s)
                     throws java.io.IOException

      Overrides:
        `write` in class `java.io.Writer`
      Throws:
        `java.io.IOException`

    - #### checkConverter

          public void checkConverter()
                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getContentWritten

          public long getContentWritten()

    - #### isNew

          public boolean isNew()

      Has this buffer been used at all?
      Returns:
        true if no chars or bytes have been added to the buffer since the last call to `recycle()`

    - #### setBufferSize

          public void setBufferSize​(int size)

    - #### reset

          public void reset()

    - #### reset

          public void reset​(boolean resetWriterStreamFlags)

    - #### getBufferSize

          public int getBufferSize()

    - #### isReady

          public boolean isReady()

    - #### setWriteListener

          public void setWriteListener​(WriteListener listener)

    - #### isBlocking

          public boolean isBlocking()

    - #### checkRegisterForWrite

          public void checkRegisterForWrite()

    - #### append

          public void append​(byte[] src,
                             int off,
                             int len)
                      throws java.io.IOException

      Add data to the buffer.
      Parameters:
        `src` - Bytes array
        `off` - Offset
        `len` - Length
      Throws:
        `java.io.IOException` - Writing overflow data to the output channel failed

    - #### append

          public void append​(char[] src,
                             int off,
                             int len)
                      throws java.io.IOException

      Add data to the buffer.
      Parameters:
        `src` - Char array
        `off` - Offset
        `len` - Length
      Throws:
        `java.io.IOException` - Writing overflow data to the output channel failed

    - #### append

          public void append​(java.nio.ByteBuffer from)
                      throws java.io.IOException

      Throws:
        `java.io.IOException`