org.apache.http.nio.util

## Class SharedOutputBuffer

- java.lang.Object
- - org.apache.http.nio.util.ExpandableBuffer
  - - org.apache.http.nio.util.SharedOutputBuffer

All Implemented Interfaces:
  BufferInfo, ContentOutputBuffer

    @ThreadSafe
    public class SharedOutputBuffer
    extends ExpandableBuffer
    implements ContentOutputBuffer

Implementation of the `ContentOutputBuffer` interface that can be shared by multiple threads, usually the I/O dispatch of an I/O reactor and a worker thread.

The I/O dispatch thread is expected to transfer data from the buffer to `ContentEncoder` by calling `produceContent(ContentEncoder)`.

The worker thread is expected to write data to the buffer by calling `write(int)`, `write(byte[], int, int)` or `writeCompleted()`

In case of an abnormal situation or when no longer needed the buffer must be shut down using `shutdown()` method.

Since:
  4.0

### Field Summary

### Fields inherited from class org.apache.http.nio.util.ExpandableBuffer

`buffer, INPUT_MODE, OUTPUT_MODE`

### Constructor Summary

Constructors
Constructor and Description
`SharedOutputBuffer(int buffersize)`
`SharedOutputBuffer(int buffersize, ByteBufferAllocator allocator)`
`SharedOutputBuffer(int buffersize, IOControl ioctrl, ByteBufferAllocator allocator)` Deprecated. (4.3) use `SharedOutputBuffer(int, ByteBufferAllocator)`

### Method Summary

Methods
`int` `available()` Returns available capacity of this buffer.
`int` `capacity()` Returns the total capacity of this buffer.
`void` `close()`
`void` `flush()`
`boolean` `hasData()` Determines if the buffer contains data.
`int` `length()` Returns the length of this buffer.
`int` `produceContent(ContentEncoder encoder)` Deprecated. (4.3) use `produceContent(ContentEncoder, IOControl)`
`int` `produceContent(ContentEncoder encoder, IOControl ioctrl)`
`void` `reset()` Resets the buffer by clearing its state and stored content.
`void` `shutdown()`
`void` `write(byte[] b)`
`void` `write(byte[] b, int off, int len)` Writes `len` bytes from the specified byte array starting at offset `off` to this buffer.
`void` `write(int b)` Writes the specified byte to this buffer.
`void` `writeCompleted()` Indicates the content has been fully written.

### Methods inherited from class org.apache.http.nio.util.ExpandableBuffer

`clear, ensureCapacity, expand, getMode, setInputMode, setOutputMode, toString`

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

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

### Constructor Detail

#### SharedOutputBuffer

    @Deprecated
    public SharedOutputBuffer(int buffersize,
                                 IOControl ioctrl,
                                 ByteBufferAllocator allocator)

Deprecated. (4.3) use `SharedOutputBuffer(int, ByteBufferAllocator)`

#### SharedOutputBuffer

    public SharedOutputBuffer(int buffersize,
                      ByteBufferAllocator allocator)

Since:
  4.3

#### SharedOutputBuffer

    public SharedOutputBuffer(int buffersize)

Since:
  4.3

### Method Detail

#### reset

    public void reset()

Description copied from interface: `ContentOutputBuffer`
Resets the buffer by clearing its state and stored content.

Specified by:
  `reset` in interface `ContentOutputBuffer`

#### hasData

    public boolean hasData()

Description copied from class: `ExpandableBuffer`
Determines if the buffer contains data.

Overrides:
  `hasData` in class `ExpandableBuffer`
Returns:
  `true` if there is data in the buffer, `false` otherwise.

#### available

    public int available()

Description copied from class: `ExpandableBuffer`
Returns available capacity of this buffer.

Specified by:
  `available` in interface `BufferInfo`
Overrides:
  `available` in class `ExpandableBuffer`
Returns:
  buffer length.

#### capacity

    public int capacity()

Description copied from class: `ExpandableBuffer`
Returns the total capacity of this buffer.

Specified by:
  `capacity` in interface `BufferInfo`
Overrides:
  `capacity` in class `ExpandableBuffer`
Returns:
  total capacity.

#### length

    public int length()

Description copied from class: `ExpandableBuffer`
Returns the length of this buffer.

Specified by:
  `length` in interface `BufferInfo`
Overrides:
  `length` in class `ExpandableBuffer`
Returns:
  buffer length.

#### produceContent

    @Deprecated
    public int produceContent(ContentEncoder encoder)
                       throws IOException

Deprecated. (4.3) use `produceContent(ContentEncoder, IOControl)`
Description copied from interface: `ContentOutputBuffer`
Writes content from this buffer to the given `ContentEncoder`.

Specified by:
  `produceContent` in interface `ContentOutputBuffer`
Parameters:
  `encoder` - content encoder.
Returns:
  number of bytes written.
Throws:
  `IOException` - in case of an I/O error.

#### produceContent

    public int produceContent(ContentEncoder encoder,
                     IOControl ioctrl)
                       throws IOException

Throws:
  `IOException`
Since:
  4.3

#### close

    public void close()

#### shutdown

    public void shutdown()

#### write

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

Description copied from interface: `ContentOutputBuffer`
Writes `len` bytes from the specified byte array starting at offset `off` to this buffer.

If `off` is negative, or `len` is negative, or `off+len` is greater than the length of the array `b`, this method can throw a runtime exception. The exact type of runtime exception thrown by this method depends on implementation.

Specified by:
  `write` in interface `ContentOutputBuffer`
Parameters:
  `b` - the data.
  `off` - the start offset in the data.
  `len` - the number of bytes to write.
Throws:
  `IOException` - if an I/O error occurs.

#### write

    public void write(byte[] b)
               throws IOException

Throws:
  `IOException`

#### write

    public void write(int b)
               throws IOException

Description copied from interface: `ContentOutputBuffer`
Writes the specified byte to this buffer.

Specified by:
  `write` in interface `ContentOutputBuffer`
Parameters:
  `b` - the `byte`.
Throws:
  `IOException` - if an I/O error occurs.

#### flush

    public void flush()
               throws IOException

Specified by:
  `flush` in interface `ContentOutputBuffer`
Throws:
  `IOException`

#### writeCompleted

    public void writeCompleted()
                        throws IOException

Description copied from interface: `ContentOutputBuffer`
Indicates the content has been fully written.

Specified by:
  `writeCompleted` in interface `ContentOutputBuffer`
Throws:
  `IOException` - if an I/O error occurs.