com.pivotal.gemfirexd.internal.client.am

## Class ByteArrayCombinerStream

- java.lang.Object
- - java.io.InputStream
  - - com.pivotal.gemfirexd.internal.client.am.ByteArrayCombinerStream

All Implemented Interfaces:
  Closeable, AutoCloseable

    public class ByteArrayCombinerStream
    extends InputStream

A stream whose source is a list of byte arrays. This class was created when first implementing the JDBC 4 length less overloads in the client driver. The reason was missing support for streaming data with unknown length from the client to the server. The purpose of the stream is to avoid having to repeatedly copy data to grow the byte buffer, or doing a single big copy to combine the byte arrays in the end. This is important for the temporary solution, since we must materialize the stream to find the length anyway. If there is less data available than the specified length, an exception is thrown. Available data is determined by the length of the byte arrays, not the contents of them. A byte array with all 0's is considered valid data. Besides from truncation, this stream does not change the underlying data in any way.

### Constructor Summary

Constructors
Constructor and Description
`ByteArrayCombinerStream(ArrayList arraysIn, long length)` Create a stream whose source is a list of byte arrays.

### Method Summary

Methods
`int` `available()` Return the number of available bytes.
`int` `read()` Read a single byte.
`int` `read(byte[] buf, int offset, int length)` Reads up to len bytes of data from the input stream into an array of bytes.

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

`close, mark, markSupported, read, reset, skip`

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

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

### Constructor Detail

#### ByteArrayCombinerStream

    public ByteArrayCombinerStream(ArrayList arraysIn,
                           long length)

Create a stream whose source is a list of byte arrays.

Parameters:
  `arraysIn` - an `ArrayList` with references to the source byte arrays. The references are copied to a new `ArrayList` instance.
  `length` - the length of the stream. Never published outside this object. Note that the length specified can be shorter than the actual number of bytes in the byte arrays.
Throws:
  `IllegalArgumentException` - if there is less data available than specified by `length`, or `length` is negative.

### Method Detail

#### read

    public int read()
             throws IOException

Read a single byte.

Specified by:
  `read` in class `InputStream`
Returns:
  a byte, or `-1` if the end-of-stream is reached
Throws:
  `IOException`

#### read

    public int read(byte[] buf,
           int offset,
           int length)
             throws IOException

Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as `len` bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.

Overrides:
  `read` in class `InputStream`
Parameters:
  `buf` - the array to copy bytes into
  `offset` - offset into the array
  `length` - the maximum number of bytes to read
Returns:
  the number of bytes read, or `-1` if end-of-stream is reached
Throws:
  `IOException`

#### available

    public int available()

Return the number of available bytes. The method assumes the specified length of the stream is correct.

Overrides:
  `available` in class `InputStream`
Returns:
  number of available bytes