org.apache.commons.io.output

## Class ByteArrayOutputStream

- java.lang.Object
- - java.io.OutputStream
  - - org.apache.commons.io.output.AbstractByteArrayOutputStream<ByteArrayOutputStream>
    - - org.apache.commons.io.output.ByteArrayOutputStream

- All Implemented Interfaces:
    Closeable, Flushable, AutoCloseable

      public class ByteArrayOutputStream
      extends AbstractByteArrayOutputStream<ByteArrayOutputStream>

  Implements a ThreadSafe version of `AbstractByteArrayOutputStream` using instance synchronization.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.commons.io.output.AbstractByteArrayOutputStream

      `AbstractByteArrayOutputStream.InputStreamConstructor<T extends InputStream>`

  - ### Field Summary

    - ### Fields inherited from class org.apache.commons.io.output.AbstractByteArrayOutputStream

      `count, DEFAULT_SIZE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ByteArrayOutputStream()` Constructs a new byte array output stream.
    `ByteArrayOutputStream(int size)` Constructs a new byte array output stream, with a buffer capacity of the specified size, in bytes.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `reset()` See `reset()`.
    `int` | `size()` Returns the current size of the byte array.
    `static InputStream` | `toBufferedInputStream(InputStream input)` Fetches entire contents of an `InputStream` and represent same data as result InputStream.
    `static InputStream` | `toBufferedInputStream(InputStream input, int size)` Fetches entire contents of an `InputStream` and represent same data as result InputStream.
    `byte[]` | `toByteArray()` Gets the current contents of this byte stream as a byte array.
    `InputStream` | `toInputStream()` Gets the current contents of this byte stream as an Input Stream.
    `void` | `write(byte[] b, int off, int len)`
    `int` | `write(InputStream in)` Writes the entire contents of the specified input stream to this byte stream.
    `void` | `write(int b)`
    `void` | `writeTo(OutputStream out)` Writes the entire contents of this byte stream to the specified output stream.

    - ### Methods inherited from class org.apache.commons.io.output.AbstractByteArrayOutputStream

      `asThis, close, needNewBuffer, resetImpl, toByteArrayImpl, toInputStream, toString, toString, write, write, writeImpl, writeImpl, writeImpl, writeToImpl`

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

      `flush`

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

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

- - ### Constructor Detail

    - #### ByteArrayOutputStream

          public ByteArrayOutputStream()

      Constructs a new byte array output stream. The buffer capacity is initially `AbstractByteArrayOutputStream.DEFAULT_SIZE` bytes, though its size increases if necessary.

    - #### ByteArrayOutputStream

          public ByteArrayOutputStream(int size)

      Constructs a new byte array output stream, with a buffer capacity of the specified size, in bytes.
      Parameters:
        `size` - the initial size
      Throws:
        `IllegalArgumentException` - if size is negative

  - ### Method Detail

    - #### reset

          public void reset()

      Description copied from class: `AbstractByteArrayOutputStream`
      See `reset()`.
      Specified by:
        `reset` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`
      See Also:
        `ByteArrayOutputStream.reset()`

    - #### size

          public int size()

      Description copied from class: `AbstractByteArrayOutputStream`
      Returns the current size of the byte array.
      Specified by:
        `size` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`
      Returns:
        the current size of the byte array

    - #### toBufferedInputStream

          public static InputStream toBufferedInputStream(InputStream input)
                                                   throws IOException

      Fetches entire contents of an `InputStream` and represent same data as result InputStream.

      This method is useful where,

      - Source InputStream is slow.
      - It has network resources associated, so we cannot keep it open for long time.
      - It has network timeout associated.
      It can be used in favor of `toByteArray()`, since it avoids unnecessary allocation and copy of byte[].
      This method buffers the input internally, so there is no need to use a `BufferedInputStream`.
      Parameters:
        `input` - Stream to be fully buffered.
      Returns:
        A fully buffered stream.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### toBufferedInputStream

          public static InputStream toBufferedInputStream(InputStream input,
                                                          int size)
                                                   throws IOException

      Fetches entire contents of an `InputStream` and represent same data as result InputStream.

      This method is useful where,

      - Source InputStream is slow.
      - It has network resources associated, so we cannot keep it open for long time.
      - It has network timeout associated.
      It can be used in favor of `toByteArray()`, since it avoids unnecessary allocation and copy of byte[].
      This method buffers the input internally, so there is no need to use a `BufferedInputStream`.
      Parameters:
        `input` - Stream to be fully buffered.
        `size` - the initial buffer size
      Returns:
        A fully buffered stream.
      Throws:
        `IOException` - if an I/O error occurs.

    - #### toByteArray

          public byte[] toByteArray()

      Description copied from class: `AbstractByteArrayOutputStream`
      Gets the current contents of this byte stream as a byte array. The result is independent of this stream.
      Specified by:
        `toByteArray` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`
      Returns:
        the current contents of this output stream, as a byte array
      See Also:
        `ByteArrayOutputStream.toByteArray()`

    - #### toInputStream

          public InputStream toInputStream()

      Description copied from class: `AbstractByteArrayOutputStream`
      Gets the current contents of this byte stream as an Input Stream. The returned stream is backed by buffers of `this` stream, avoiding memory allocation and copy, thus saving space and time.
      Specified by:
        `toInputStream` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`
      Returns:
        the current contents of this output stream.
      See Also:
        `ByteArrayOutputStream.toByteArray()`, `AbstractByteArrayOutputStream.reset()`

    - #### write

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

      Specified by:
        `write` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`

    - #### write

          public int write(InputStream in)
                    throws IOException

      Description copied from class: `AbstractByteArrayOutputStream`
      Writes the entire contents of the specified input stream to this byte stream. Bytes from the input stream are read directly into the internal buffer of this stream.
      Specified by:
        `write` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`
      Parameters:
        `in` - the input stream to read from
      Returns:
        total number of bytes read from the input stream (and written to this stream)
      Throws:
        `IOException` - if an I/O error occurs while reading the input stream

    - #### write

          public void write(int b)

      Specified by:
        `write` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`

    - #### writeTo

          public void writeTo(OutputStream out)
                       throws IOException

      Description copied from class: `AbstractByteArrayOutputStream`
      Writes the entire contents of this byte stream to the specified output stream.
      Specified by:
        `writeTo` in class `AbstractByteArrayOutputStream<ByteArrayOutputStream>`
      Parameters:
        `out` - the output stream to write to
      Throws:
        `IOException` - if an I/O error occurs, such as if the stream is closed
      See Also:
        `ByteArrayOutputStream.writeTo(OutputStream)`