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
`protected C2BConverter` `conv` Current char to byte converter.
`static int` `DEFAULT_BUFFER_SIZE`

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

`lock`

### Constructor Summary

Constructors
`OutputBuffer​(int size)` Create the buffer with the specified initial size.

### Method Summary

All Methods Instance Methods Concrete Methods
`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`