Class TeeInputStream

All Implemented Interfaces:
Closeable, AutoCloseable

public class TeeInputStream extends ProxyInputStream
InputStream proxy that transparently writes a copy of all bytes read from the proxied stream to a given OutputStream. Using ProxyInputStream.skip(long) or ProxyInputStream.mark(int)/ProxyInputStream.reset() on the stream will result on some bytes from the input stream being skipped or duplicated in the output stream.

The proxied input stream is closed when the close() method is called on this proxy. You may configure whether the input stream closes the output stream.

Since:
1.4
See Also:
  • Constructor Details

    • TeeInputStream

      public TeeInputStream(InputStream input, OutputStream branch)
      Constructs a TeeInputStream that proxies the given InputStream and copies all read bytes to the given OutputStream. The given output stream will not be closed when this stream gets closed.
      Parameters:
      input - input stream to be proxied
      branch - output stream that will receive a copy of all bytes read
    • TeeInputStream

      public TeeInputStream(InputStream input, OutputStream branch, boolean closeBranch)
      Constructs a TeeInputStream that proxies the given InputStream and copies all read bytes to the given OutputStream. The given output stream will be closed when this stream gets closed if the closeBranch parameter is true.
      Parameters:
      input - input stream to be proxied
      branch - output stream that will receive a copy of all bytes read
      closeBranch - flag for closing also the output stream when this stream is closed
  • Method Details

    • close

      public void close() throws IOException
      Closes the proxied input stream and, if so configured, the associated output stream. An exception thrown from one stream will not prevent closing of the other stream.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class ProxyInputStream
      Throws:
      IOException - if either of the streams could not be closed
    • read

      public int read() throws IOException
      Reads a single byte from the proxied input stream and writes it to the associated output stream.
      Overrides:
      read in class ProxyInputStream
      Returns:
      next byte from the stream, or -1 if the stream has ended
      Throws:
      IOException - if the stream could not be read (or written)
    • read

      public int read(byte[] bts) throws IOException
      Reads bytes from the proxied input stream and writes the read bytes to the associated output stream.
      Overrides:
      read in class ProxyInputStream
      Parameters:
      bts - byte buffer
      Returns:
      number of bytes read, or -1 if the stream has ended
      Throws:
      IOException - if the stream could not be read (or written)
    • read

      public int read(byte[] bts, int st, int end) throws IOException
      Reads bytes from the proxied input stream and writes the read bytes to the associated output stream.
      Overrides:
      read in class ProxyInputStream
      Parameters:
      bts - byte buffer
      st - start offset within the buffer
      end - maximum number of bytes to read
      Returns:
      number of bytes read, or -1 if the stream has ended
      Throws:
      IOException - if the stream could not be read (or written)