org.firebirdsql.jdbc

## Class FBBlobInputStream

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

All Implemented Interfaces:
  java.io.Closeable, java.lang.AutoCloseable, FirebirdBlob.BlobInputStream

    public final class FBBlobInputStream
    extends java.io.InputStream
    implements FirebirdBlob.BlobInputStream

An input stream for reading directly from a FBBlob instance.

### Field Summary

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

`SEEK_MODE_ABSOLUTE, SEEK_MODE_FROM_TAIL, SEEK_MODE_RELATIVE`

### Method Summary

All Methods Instance Methods Concrete Methods
`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)` Similar to Java 9's `InputStream#readNBytes(byte[], int, int)`
`byte[]` `readNBytes(int len)` Similar to Java 9's `InputStream#readNBytes(int)`.
`void` `seek(int position)` Move current position in the Blob stream.
`void` `seek(int position, FbBlob.SeekMode seekMode)`
`void` `seek(int position, int seekMode)` Move current position in the Blob stream.
`long` `transferTo(java.io.OutputStream out)`

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

`mark, markSupported, read, reset, skip`

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

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

### Method Detail

#### 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 java.io.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:
  `java.io.IOException` - if I/O error occurs.

#### seek

    public void seek(int position,
                     int seekMode)
              throws java.io.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:
  `java.io.IOException` - if I/O error occurs

#### seek

    public void seek(int position,
                     FbBlob.SeekMode seekMode)
              throws java.io.IOException

Throws:
  `java.io.IOException`

#### length

    public long length()
                throws java.io.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:
  `java.io.IOException` - if I/O error occurs

#### available

    public int available()
                  throws java.io.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 `java.io.InputStream`
Returns:
  number of bytes available without blocking or -1 if end of stream is reached.
Throws:
  `java.io.IOException` - if I/O error occurred.

#### read

    public int read()
             throws java.io.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 `java.io.InputStream`
Returns:
  next byte read from the stream or `-1` if end of stream was reached
Throws:
  `java.io.IOException` - if I/O error occurs
See Also:
  `InputStream.read()`

#### read

    public int read(byte[] b,
                    int off,
                    int len)
             throws java.io.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 `java.io.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:
  `java.io.IOException` - if I/O error occurs
See Also:
  `InputStream.read(byte[], int, int)`

#### readNBytes

    public int readNBytes(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException

Description copied from interface: `FirebirdBlob.BlobInputStream`
Similar to Java 9's `InputStream#readNBytes(byte[], int, int)`

Specified by:
  `readNBytes` in interface `FirebirdBlob.BlobInputStream`
Throws:
  `java.io.IOException`

#### readNBytes

    public byte[] readNBytes(int len)
                      throws java.io.IOException

Description copied from interface: `FirebirdBlob.BlobInputStream`
Similar to Java 9's `InputStream#readNBytes(int)`.

Specified by:
  `readNBytes` in interface `FirebirdBlob.BlobInputStream`
Throws:
  `java.io.IOException`

#### readFully

    public void readFully(byte[] b,
                          int off,
                          int len)
                   throws java.io.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:
  `java.io.EOFException` - if stream end was reached when reading data.
  `java.io.IOException` - if I/O error occurs.

#### readFully

    public void readFully(byte[] b)
                   throws java.io.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:
  `java.io.IOException` - if I/O error occurs

#### transferTo

    public long transferTo(java.io.OutputStream out)
                    throws java.io.IOException

Throws:
  `java.io.IOException`

#### close

    public void close()
               throws java.io.IOException

Description copied from interface: `FirebirdBlob.BlobInputStream`
Close this stream.

Specified by:
  `close` in interface `java.io.Closeable`
Specified by:
  `close` in interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `FirebirdBlob.BlobInputStream`
Overrides:
  `close` in class `java.io.InputStream`
Throws:
  `java.io.IOException` - if I/O error occurs.