Package org.postgresql.core

# Class VisibleBufferedInputStream

java.lang.Object
java.io.InputStream
org.postgresql.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.

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
Description
`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.
`InputStream`
`getWrapped()`
`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, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skipNBytes, transferTo`

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

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

## Constructor Details

### 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 Details

### 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 `AutoCloseable`
Specified by:
  `close` in interface `Closeable`
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)

### getWrapped

public InputStream getWrapped()

Returns:
  the wrapped stream