Package org.firebirdsql.jdbc

## Interface FirebirdBlob.BlobInputStream

- All Known Implementing Classes:
    `FBBlobInputStream`
  Enclosing interface:
    FirebirdBlob

      public static interface FirebirdBlob.BlobInputStream

  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
    Modifier and Type | Field | Description
    --- | --- | ---
    `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
    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[] buffer, int offset, int length)` | Read some bytes from the stream without blocking.
    `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.
    `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.
      Throws:
        `java.io.IOException` - if I/O error occurs.

    - #### length

          long length()
               throws java.io.IOException

      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.
      Returns:
        length of the blob.
      Throws:
        `java.io.IOException` - if I/O error occurs.

    - #### read

          int read()
            throws java.io.IOException

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

    - #### read

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

      Read some bytes from the stream without blocking.
      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 read.
      Throws:
        `java.io.IOException` - if I/O error occurs.

    - #### readFully

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

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

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

      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.

      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.