Package org.eclipse.jgit.util.io

## Class UnionInputStream

- java.lang.Object
- - java.io.InputStream
  - - org.eclipse.jgit.util.io.UnionInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

    public class UnionInputStream
    extends InputStream

An InputStream which reads from one or more InputStreams.

This stream may enter into an EOF state, returning -1 from any of the read methods, and then later successfully read additional bytes if a new InputStream is added after reaching EOF.

Currently this stream does not support the mark/reset APIs. If mark and later reset functionality is needed the caller should wrap this stream with a `BufferedInputStream`.

### Constructor Summary

Constructors
`UnionInputStream()` Create an empty InputStream that is currently at EOF state.
`UnionInputStream​(InputStream... inputStreams)` Create an InputStream that is a union of the individual streams.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `add​(InputStream in)` Add the given InputStream onto the end of the stream queue.
`int` `available()`
`void` `close()`
`boolean` `isEmpty()` Returns true if there are no more InputStreams in the stream queue.
`int` `read()`
`int` `read​(byte[] b, int off, int len)`
`long` `skip​(long count)`

### Methods inherited from class java.io.InputStream

`mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, transferTo`

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

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

### Constructor Detail

#### UnionInputStream

    public UnionInputStream()

Create an empty InputStream that is currently at EOF state.

#### UnionInputStream

    public UnionInputStream​(InputStream... inputStreams)

Create an InputStream that is a union of the individual streams.

As each stream reaches EOF, it will be automatically closed before bytes from the next stream are read.

Parameters:
  `inputStreams` - streams to be pushed onto this stream.

### Method Detail

#### add

    public void add​(InputStream in)

Add the given InputStream onto the end of the stream queue.

When the stream reaches EOF it will be automatically closed.

Parameters:
  `in` - the stream to add; must not be null.

#### isEmpty

    public boolean isEmpty()

Returns true if there are no more InputStreams in the stream queue.

If this method returns `true` then all read methods will signal EOF by returning -1, until another InputStream has been pushed into the queue with `add(InputStream)`.

Returns:
  true if there are no more streams to read from.

#### read

    public int read()
             throws IOException

Specified by:
  `read` in class `InputStream`
Throws:
  `IOException`

#### read

    public int read​(byte[] b,
                    int off,
                    int len)
             throws IOException

Overrides:
  `read` in class `InputStream`
Throws:
  `IOException`

#### available

    public int available()
                  throws IOException

Overrides:
  `available` in class `InputStream`
Throws:
  `IOException`

#### skip

    public long skip​(long count)
              throws IOException

Overrides:
  `skip` in class `InputStream`
Throws:
  `IOException`

#### close

    public void close()
               throws IOException

Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
Overrides:
  `close` in class `InputStream`
Throws:
  `IOException`