com.amazon.redshift.core

## Class VisibleBufferedInputStream

- java.lang.Object
- - java.io.InputStream
  - - com.amazon.redshift.core.VisibleBufferedInputStream

All Implemented Interfaces:
  Closeable, AutoCloseable

    public class VisibleBufferedInputStream
    extends InputStream

A faster version of BufferedInputStream. Does no synchronisation and allows direct access to the used byte[] buffer.

Author:
  Mikko Tiihonen

### Constructor Summary

Constructors
Constructor and Description
`VisibleBufferedInputStream(InputStream in, int bufferSize)` Creates a new buffer around the given stream.

### Method Summary

Methods
`int` `available()`
`void` `close()`
`boolean` `ensureBytes(int n)` Ensures that the buffer contains at least n bytes.
`boolean` `ensureBytes(int n, boolean block)` Ensures that the buffer contains at least n bytes.
`byte[]` `getBuffer()` Returns direct handle to the used buffer.
`int` `getIndex()` Returns the current read position in the buffer.
`int` `peek()` Reads a byte from the buffer without advancing the index pointer.
`int` `read()`
`int` `read(byte[] to, int off, int len)`
`byte` `readRaw()` Reads byte from the buffer without any checks.
`int` `scanCStringLength()` Scans the length of the next null terminated string (C-style string) from the stream.
`void` `setTimeoutRequested(boolean timeoutRequested)`
`long` `skip(long n)`

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

`mark, markSupported, read, reset`

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

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

### Constructor Detail

#### VisibleBufferedInputStream

    public VisibleBufferedInputStream(InputStream in,
                              int bufferSize)

Creates a new buffer around the given stream.

Parameters:
  `in` - The stream to buffer.
  `bufferSize` - The initial size of the buffer.

### Method Detail

#### read

    public int read()
             throws IOException

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

#### peek

    public int peek()
             throws IOException

Reads a byte from the buffer without advancing the index pointer.

Returns:
  byte from the buffer without advancing the index pointer
Throws:
  `IOException` - if something wrong happens

#### readRaw

    public byte readRaw()

Reads byte from the buffer without any checks. This method never reads from the underlaying stream. Before calling this method the `ensureBytes(int)` method must have been called.

Returns:
  The next byte from the buffer.
Throws:
  `ArrayIndexOutOfBoundsException` - If ensureBytes was not called to make sure the buffer contains the byte.

#### ensureBytes

    public boolean ensureBytes(int n)
                        throws IOException

Ensures that the buffer contains at least n bytes. This method invalidates the buffer and index fields.

Parameters:
  `n` - The amount of bytes to ensure exists in buffer
Returns:
  true if required bytes are available and false if EOF
Throws:
  `IOException` - If reading of the wrapped stream failed.

#### ensureBytes

    public boolean ensureBytes(int n,
                      boolean block)
                        throws IOException

Ensures that the buffer contains at least n bytes. This method invalidates the buffer and index fields.

Parameters:
  `n` - The amount of bytes to ensure exists in buffer
  `block` - whether or not to block the IO
Returns:
  true if required bytes are available and false if EOF or the parameter block was false and socket timeout occurred.
Throws:
  `IOException` - If reading of the wrapped stream failed.

#### read

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

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

#### skip

    public long skip(long n)
              throws IOException

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

#### available

    public int available()
                  throws IOException

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

#### close

    public void close()
               throws IOException

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

#### getBuffer

    public byte[] getBuffer()

Returns direct handle to the used buffer. Use the `ensureBytes(int)` to prefill required bytes the buffer and `getIndex()` to fetch the current position of the buffer.

Returns:
  The underlaying buffer.

#### getIndex

    public int getIndex()

Returns the current read position in the buffer.

Returns:
  the current read position in the buffer.

#### scanCStringLength

    public int scanCStringLength()
                          throws IOException

Scans the length of the next null terminated string (C-style string) from the stream.

Returns:
  The length of the next null terminated string.
Throws:
  `IOException` - If reading of stream fails.
  `EOFException` - If the stream did not contain any null terminators.

#### setTimeoutRequested

    public void setTimeoutRequested(boolean timeoutRequested)