Module org.firebirdsql.jaybird
Package org.firebirdsql.jdbc

# Class FBBlobInputStream

java.lang.Object
java.io.InputStream
org.firebirdsql.jdbc.FBBlobInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `FirebirdBlob.BlobInputStream`

@InternalApi public final class FBBlobInputStream extends InputStream implements FirebirdBlob.BlobInputStream
An input stream for reading directly from a FBBlob instance.

This class is internal API of Jaybird. Future versions may radically change, move, or make inaccessible this type. For the public API, refer to the `FirebirdBlob.BlobInputStream` interface.

- ## Field Summary

  ### Fields inherited from interface org.firebirdsql.jdbc.FirebirdBlob.BlobInputStream

  `SEEK_MODE_ABSOLUTE, SEEK_MODE_FROM_TAIL, SEEK_MODE_RELATIVE`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `available()`
  Get number of available bytes that can be read without blocking.
  `void`
  `close()`
  Close this stream.
  `FirebirdBlob`
  `getBlob()`
  Get instance of `FirebirdBlob` to which this stream belongs to.
  `long`
  `length()`
  Get Blob length.
  `int`
  `read()`
  Read a single byte from the stream.
  `int`
  `read(byte[] b, int off, int len)`
  Read some bytes from the stream into `buffer`.
  `void`
  `readFully(byte[] b)`
  Read `buffer.length` bytes from the buffer.
  `void`
  `readFully(byte[] b, int off, int len)`
  Read `length` from the stream into the specified buffer.
  `int`
  `readNBytes(byte[] b, int off, int len)`
  `void`
  `seek(int position)`
  Move current position in the Blob stream.
  `void`
  `seek(int position, int seekMode)`
  Move current position in the Blob stream.
  `void`
  `seek(int position, FbBlob.SeekMode seekMode)`
  `long`
  `transferTo(OutputStream out)`

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

  `mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, reset, skip, skipNBytes`

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

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

  ### Methods inherited from interface org.firebirdsql.jdbc.FirebirdBlob.BlobInputStream

  `readNBytes`

- ## Method Details

  - ### getBlob

    public FirebirdBlob getBlob()
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Get instance of `FirebirdBlob` to which this stream belongs to.

    Note, code

         FirebirdBlob.BlobInputStream otherStream = (FirebirdBlob.BlobInputStream)
             inputStream.getBlob().getBinaryStream();

    will return new stream object.
    Specified by:
      `getBlob` in interface `FirebirdBlob.BlobInputStream`
    Returns:
      instance of `FirebirdBlob`.

  - ### seek

    public void seek(int position) throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Move current position in the Blob stream. This is a shortcut method to `FirebirdBlob.BlobInputStream.seek(int, int)` passing `FirebirdBlob.BlobInputStream.SEEK_MODE_ABSOLUTE` as seek mode.
    Specified by:
      `seek` in interface `FirebirdBlob.BlobInputStream`
    Parameters:
      `position` - absolute position to seek, starting position is 0 (note, in `Blob.getBytes(long, int)` starting position is 1).
    Throws:
      `IOException` - if I/O error occurs.

  - ### seek

    public void seek(int position, int seekMode) throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Move current position in the Blob stream. Depending on the specified seek mode, position can be either positive or negative.
    Specified by:
      `seek` in interface `FirebirdBlob.BlobInputStream`
    Parameters:
      `position` - position in the stream, starting position is 0 (note, in `Blob.getBytes(long, int)` starting position is 1)
      `seekMode` - mode of seek operation, one of `FirebirdBlob.BlobInputStream.SEEK_MODE_ABSOLUTE`, `FirebirdBlob.BlobInputStream.SEEK_MODE_RELATIVE` or `FirebirdBlob.BlobInputStream.SEEK_MODE_FROM_TAIL`
    Throws:
      `IOException` - if I/O error occurs

  - ### seek

    public void seek(int position, FbBlob.SeekMode seekMode) throws IOException
    Throws:
      `IOException`

  - ### length

    public long length() throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Get Blob length. This is a shortcut for `inputStream.getBlob().length()` call, and is more resource friendly, because no new Blob handle is created.
    Specified by:
      `length` in interface `FirebirdBlob.BlobInputStream`
    Returns:
      length of the blob
    Throws:
      `IOException` - if I/O error occurs

  - ### available

    public int available() throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Get number of available bytes that can be read without blocking. This method will return number of bytes of the last read blob segment in the blob buffer.
    Specified by:
      `available` in interface `FirebirdBlob.BlobInputStream`
    Overrides:
      `available` in class `InputStream`
    Returns:
      number of bytes available without blocking or -1 if end of stream is reached.
    Throws:
      `IOException` - if I/O error occurred.

  - ### read

    public int read() throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Read a single byte from the stream.
    Specified by:
      `read` in interface `FirebirdBlob.BlobInputStream`
    Specified by:
      `read` in class `InputStream`
    Returns:
      next byte read from the stream or `-1` if end of stream was reached
    Throws:
      `IOException` - if I/O error occurs
    See Also:
      - `InputStream.read()`

  - ### read

    public int read(byte[] b, int off, int len) throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Read some bytes from the stream into `buffer`.

    The implementation may read less bytes than requested. Implementations may perform multiple roundtrips to the server to fill `buffer` up to the requested length.

    Specified by:
      `read` in interface `FirebirdBlob.BlobInputStream`
    Overrides:
      `read` in class `InputStream`
    Parameters:
      `b` - buffer into which data should be read
      `off` - offset in the buffer where to start
      `len` - number of bytes to read
    Returns:
      number of bytes that were actually read, returns `0` if `len == 0`, `-1` if end-of-blob was reached without reading any bytes
    Throws:
      `IOException` - if I/O error occurs
    See Also:
      - `InputStream.read(byte[], int, int)`

  - ### readNBytes

    public int readNBytes(byte[] b, int off, int len) throws IOException
    Specified by:
      `readNBytes` in interface `FirebirdBlob.BlobInputStream`
    Overrides:
      `readNBytes` in class `InputStream`
    Throws:
      `IOException`
    See Also:
      - `InputStream.readNBytes(byte[], int, int)`

  - ### readFully

    public void readFully(byte[] b, int off, int len) throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Read `length` from the stream into the specified buffer.

    This method will throw an `EOFException` if end-of-blob was reached before reading `length` bytes.

    Specified by:
      `readFully` in interface `FirebirdBlob.BlobInputStream`
    Parameters:
      `b` - buffer where data should be read
      `off` - offset in the buffer where to start
      `len` - number of bytes to read
    Throws:
      `EOFException` - if stream end was reached when reading data.
      `IOException` - if I/O error occurs.

  - ### readFully

    public void readFully(byte[] b) throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Read `buffer.length` bytes from the buffer. This is a shortcut method for `readFully(buffer, 0, buffer.length)` call.
    Specified by:
      `readFully` in interface `FirebirdBlob.BlobInputStream`
    Parameters:
      `b` - buffer where data should be read
    Throws:
      `IOException` - if I/O error occurs

  - ### transferTo

    public long transferTo(OutputStream out) throws IOException
    Overrides:
      `transferTo` in class `InputStream`
    Throws:
      `IOException`

  - ### close

    public void close() throws IOException
    Description copied from interface: `FirebirdBlob.BlobInputStream`
    Close this stream.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Specified by:
      `close` in interface `FirebirdBlob.BlobInputStream`
    Overrides:
      `close` in class `InputStream`
    Throws:
      `IOException` - if I/O error occurs.