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.