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()`
  Returns the underlying stream.
  `int`
  `peek()`
  Reads a byte from the buffer without advancing the index pointer.
  `int`
  `read()`
  `int`
  `read(byte[] to, int off, int len)`
  `int`
  `readInt2()`
  Reads an int2 value from the underlying stream as an unsigned integer (0..65535).
  `int`
  `readInt4()`
  Reads an int4 value from the underlying stream.
  `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`

  - ### readInt2

    public int readInt2() throws IOException
    Reads an int2 value from the underlying stream as an unsigned integer (0..65535).
    Returns:
      int2 in the range of 0..65535
    Throws:
      `IOException` - if an I/ O error occurs.

  - ### readInt4

    public int readInt4() throws IOException
    Reads an int4 value from the underlying stream.
    Returns:
      int4 value from the underlying stream
    Throws:
      `IOException` - if an I/ O error occurs.

  - ### 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 underlying 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 underlying 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 underlying stream.
    Returns:
      the underlying stream