Package org.firebirdsql.jdbc

## Interface FirebirdBlob.BlobInputStream

All Superinterfaces:
  `java.lang.AutoCloseable`

All Known Implementing Classes:
  `FBBlobInputStream`

Enclosing interface:
  FirebirdBlob

    public static interface FirebirdBlob.BlobInputStream
    extends java.lang.AutoCloseable

Blob input stream. This interface defines methods to access contents of the Blob field. Some method signatures are copied from the `InputStream` only because it is abstract class and not interface that we can extend.

### Field Summary

Fields
`static int` `SEEK_MODE_ABSOLUTE` Seek based on the absolute beginning of the stream
`static int` `SEEK_MODE_FROM_TAIL` Seek relative to the tail end of the stream
`static int` `SEEK_MODE_RELATIVE` Seek relative to the current position in the stream

### Method Summary

All Methods Instance Methods Abstract 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[] buffer, int offset, int length)` Read some bytes from the stream into `buffer`.
`void` `readFully​(byte[] buffer)` Read `buffer.length` bytes from the buffer.
`void` `readFully​(byte[] buffer, int offset, int length)` 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, int seekMode)` Move current position in the Blob stream.

### Field Detail

#### SEEK_MODE_ABSOLUTE

    static final int SEEK_MODE_ABSOLUTE

Seek based on the absolute beginning of the stream

See Also:
  Constant Field Values

#### SEEK_MODE_RELATIVE

    static final int SEEK_MODE_RELATIVE

Seek relative to the current position in the stream

See Also:
  Constant Field Values

#### SEEK_MODE_FROM_TAIL

    static final int SEEK_MODE_FROM_TAIL

Seek relative to the tail end of the stream

See Also:
  Constant Field Values

### Method Detail

#### getBlob

    FirebirdBlob getBlob()

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.

Returns:
  instance of `FirebirdBlob`.

#### available

    int available()
           throws java.io.IOException

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.

Returns:
  number of bytes available without blocking or -1 if end of stream is reached.
Throws:
  `java.io.IOException` - if I/O error occurred.

#### close

    void close()
        throws java.io.IOException

Close this stream.

Specified by:
  `close` in interface `java.lang.AutoCloseable`
Throws:
  `java.io.IOException` - if I/O error occurs.

#### length

    long length()
         throws java.io.IOException

Get Blob length. This is a shortcut for `inputStream.getBlob().length()` call, and is more resource friendly, because no new Blob handle is created.

Returns:
  length of the blob
Throws:
  `java.io.IOException` - if I/O error occurs

#### read

    int read()
      throws java.io.IOException

Read a single byte from the stream.

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

    int read​(byte[] buffer,
             int offset,
             int length)
      throws java.io.IOException

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.

Parameters:
  `buffer` - buffer into which data should be read
  `offset` - offset in the buffer where to start
  `length` - 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)`

#### readFully

    void readFully​(byte[] buffer,
                   int offset,
                   int length)
            throws java.io.IOException

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.

Parameters:
  `buffer` - buffer where data should be read
  `offset` - offset in the buffer where to start
  `length` - 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

    void readFully​(byte[] buffer)
            throws java.io.IOException

Read `buffer.length` bytes from the buffer. This is a shortcut method for `readFully(buffer, 0, buffer.length)` call.

Parameters:
  `buffer` - buffer where data should be read
Throws:
  `java.io.IOException` - if I/O error occurs

#### readNBytes

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

Similar to Java 9's `InputStream#readNBytes(byte[], int, int)`

Throws:
  `java.io.IOException`

#### readNBytes

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

Similar to Java 9's `InputStream#readNBytes(int)`.

Throws:
  `java.io.IOException`

#### seek

    void seek​(int position)
       throws java.io.IOException

Move current position in the Blob stream. This is a shortcut method to `seek(int, int)` passing `SEEK_MODE_ABSOLUTE` as seek mode.

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

    void seek​(int position,
              int seekMode)
       throws java.io.IOException

Move current position in the Blob stream. Depending on the specified seek mode, position can be either positive or negative.

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 `SEEK_MODE_ABSOLUTE`, `SEEK_MODE_RELATIVE` or `SEEK_MODE_FROM_TAIL`
Throws:
  `java.io.IOException` - if I/O error occurs