Package org.apache.commons.io.output

# Class TeeOutputStream

java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
org.apache.commons.io.output.ProxyOutputStream
org.apache.commons.io.output.TeeOutputStream

All Implemented Interfaces:
  `Closeable`, `Flushable`, `AutoCloseable`

public class TeeOutputStream extends ProxyOutputStream
Classic splitter of `OutputStream`. Named after the Unix 'tee' command. It allows a stream to be branched off so there are now two streams.

- ## Nested Class Summary

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

  `ProxyOutputStream.Builder`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected OutputStream`
  `branch`
  The second OutputStream to write to.

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

  `out`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TeeOutputStream(OutputStream out, OutputStream branch)`
  Constructs a TeeOutputStream.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Closes both output streams.
  `void`
  `flush()`
  Flushes both streams.
  `void`
  `write(byte[] b)`
  Writes the bytes to both streams.
  `void`
  `write(byte[] b, int off, int len)`
  Writes the specified bytes to both streams.
  `void`
  `write(int b)`
  Writes a byte to both streams.

  ### Methods inherited from class org.apache.commons.io.output.ProxyOutputStream

  `afterWrite, beforeWrite, handleIOException, setReference, unwrap, writeRepeat, writeRepeat, writeRepeat`

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

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

- ## Field Details

  - ### branch

    protected OutputStream branch
    The second OutputStream to write to. TODO Make private and final in 3.0.

- ## Constructor Details

  - ### TeeOutputStream

    public TeeOutputStream(OutputStream out, OutputStream branch)
    Constructs a TeeOutputStream.
    Parameters:
      `out` - the main OutputStream.
      `branch` - the second OutputStream.

- ## Method Details

  - ### close

    public void close() throws IOException
    Closes both output streams.

    If closing the main output stream throws an exception, attempt to close the branch output stream.

    If closing the main and branch output streams both throw exceptions, which exceptions is thrown by this method is currently unspecified and subject to change.

    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `ProxyOutputStream`
    Throws:
      `IOException` - if an I/O error occurs.

  - ### flush

    public void flush() throws IOException
    Flushes both streams.
    Specified by:
      `flush` in interface `Flushable`
    Overrides:
      `flush` in class `ProxyOutputStream`
    Throws:
      `IOException` - if an I/O error occurs.

  - ### write

    public void write(byte[] b) throws IOException
    Writes the bytes to both streams.
    Overrides:
      `write` in class `ProxyOutputStream`
    Parameters:
      `b` - the bytes to write.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### write

    public void write(byte[] b, int off, int len) throws IOException
    Writes the specified bytes to both streams.
    Overrides:
      `write` in class `ProxyOutputStream`
    Parameters:
      `b` - the bytes to write.
      `off` - The start offset.
      `len` - The number of bytes to write.
    Throws:
      `IOException` - if an I/O error occurs.

  - ### write

    public void write(int b) throws IOException
    Writes a byte to both streams.
    Overrides:
      `write` in class `ProxyOutputStream`
    Parameters:
      `b` - the byte to write.
    Throws:
      `IOException` - if an I/O error occurs.