## 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
`SharedOutputBuffer(int buffersize, IOControl ioctrl, ByteBufferAllocator allocator)`

Method Summary
`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)` Writes content from this buffer to the given `ContentEncoder`.
`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

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

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

    public int produceContent(ContentEncoder encoder)
                       throws IOException

  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.

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

Copyright © 2005-2013 The Apache Software Foundation. All Rights Reserved.