Package 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`

- ## Constructor Summary

  Constructors
  Constructor
  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

  Modifier and Type
  Method
  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)`
  `void`
  `write(int b)`
  `int`
  `write(InputStream in)`
  Writes the entire contents of the specified input stream to this byte stream.
  `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, 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, wait, wait, wait`

- ## Constructor Details

  - ### ByteArrayOutputStream

    public ByteArrayOutputStream()
    Constructs a new byte array output stream. The buffer capacity is initially 1024 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 Details

  - ### 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.
    Since:
      2.0

  - ### 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.
    Since:
      2.5

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

  - ### 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)`