Package org.apache.commons.io.input

# Class TeeReader

java.lang.Object
java.io.Reader
java.io.FilterReader
org.apache.commons.io.input.ProxyReader
org.apache.commons.io.input.TeeReader

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

public class TeeReader extends ProxyReader
Reader proxy that transparently writes a copy of all characters read from the proxied reader to a given Reader. Using `ProxyReader.skip(long)` or `ProxyReader.mark(int)`/`ProxyReader.reset()` on the reader will result on some characters from the reader being skipped or duplicated in the writer.

The proxied reader is closed when the `close()` method is called on this proxy. You may configure whether the reader closes the writer.

Since:
  2.7

- ## Field Summary

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

  `in`

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

  `lock`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TeeReader(Reader input, Writer branch)`
  Constructs a TeeReader that proxies the given `Reader` and copies all read characters to the given `Writer`.
  `TeeReader(Reader input, Writer branch, boolean closeBranch)`
  Constructs a TeeReader that proxies the given `Reader` and copies all read characters to the given `Writer`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `close()`
  Closes the proxied reader and, if so configured, the associated writer.
  `int`
  `read()`
  Reads a single character from the proxied reader and writes it to the associated writer.
  `int`
  `read(char[] chr)`
  Reads characters from the proxied reader and writes the read characters to the associated writer.
  `int`
  `read(char[] chr, int st, int end)`
  Reads characters from the proxied reader and writes the read characters to the associated writer.
  `int`
  `read(CharBuffer target)`
  Reads characters from the proxied reader and writes the read characters to the associated writer.

  ### Methods inherited from class org.apache.commons.io.input.ProxyReader

  `afterRead, beforeRead, handleIOException, mark, markSupported, ready, reset, skip`

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

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

- ## Constructor Details

  - ### TeeReader

    public TeeReader(Reader input, Writer branch)
    Constructs a TeeReader that proxies the given `Reader` and copies all read characters to the given `Writer`. The given writer will not be closed when this reader gets closed.
    Parameters:
      `input` - reader to be proxied
      `branch` - writer that will receive a copy of all characters read

  - ### TeeReader

    public TeeReader(Reader input, Writer branch, boolean closeBranch)
    Constructs a TeeReader that proxies the given `Reader` and copies all read characters to the given `Writer`. The given writer will be closed when this reader gets closed if the closeBranch parameter is `true`.
    Parameters:
      `input` - reader to be proxied
      `branch` - writer that will receive a copy of all characters read
      `closeBranch` - flag for closing also the writer when this reader is closed

- ## Method Details

  - ### close

    public void close() throws IOException
    Closes the proxied reader and, if so configured, the associated writer. An exception thrown from the reader will not prevent closing of the writer.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Overrides:
      `close` in class `ProxyReader`
    Throws:
      `IOException` - if either the reader or writer could not be closed

  - ### read

    public int read() throws IOException
    Reads a single character from the proxied reader and writes it to the associated writer.
    Overrides:
      `read` in class `ProxyReader`
    Returns:
      next character from the reader, or -1 if the reader has ended
    Throws:
      `IOException` - if the reader could not be read (or written)

  - ### read

    public int read(char[] chr) throws IOException
    Reads characters from the proxied reader and writes the read characters to the associated writer.
    Overrides:
      `read` in class `ProxyReader`
    Parameters:
      `chr` - character buffer
    Returns:
      number of characters read, or -1 if the reader has ended
    Throws:
      `IOException` - if the reader could not be read (or written)

  - ### read

    public int read(char[] chr, int st, int end) throws IOException
    Reads characters from the proxied reader and writes the read characters to the associated writer.
    Overrides:
      `read` in class `ProxyReader`
    Parameters:
      `chr` - character buffer
      `st` - start offset within the buffer
      `end` - maximum number of characters to read
    Returns:
      number of characters read, or -1 if the reader has ended
    Throws:
      `IOException` - if the reader could not be read (or written)

  - ### read

    public int read(CharBuffer target) throws IOException
    Reads characters from the proxied reader and writes the read characters to the associated writer.
    Specified by:
      `read` in interface `Readable`
    Overrides:
      `read` in class `ProxyReader`
    Parameters:
      `target` - character buffer
    Returns:
      number of characters read, or -1 if the reader has ended
    Throws:
      `IOException` - if the reader could not be read (or written)