Package 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
    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 single byte from the stream.
    `int` | `read​(byte[] b, int off, int len)` | Read some bytes from the stream without blocking.
    `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.
    `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)` |

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

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

    - ### 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.

      Note, this method allows to move position in the Blob stream only forward. If you need to read data before the current position, new stream must be opened.

      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 shortcut method for the `inputStream.getBlob().length()` call, however 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 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.

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

    - #### 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 can block until desired number of bytes is read, it can throw an exception if end of stream was reached during read.
      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.

    - #### close

          public void close()
                     throws java.io.IOException

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