Package org.firebirdsql.gds.ng.wire.version10

## Class V10InputBlob

- java.lang.Object
- - org.firebirdsql.gds.ng.AbstractFbBlob
  - - org.firebirdsql.gds.ng.wire.AbstractFbWireBlob
    - - org.firebirdsql.gds.ng.wire.AbstractFbWireInputBlob
      - - org.firebirdsql.gds.ng.wire.version10.V10InputBlob

All Implemented Interfaces:
  `java.lang.AutoCloseable`, `FbBlob`, `DatabaseListener`, `ExceptionListenable`, `TransactionListener`, `FbWireBlob`

Direct Known Subclasses:
  `V11InputBlob`

    public class V10InputBlob
    extends AbstractFbWireInputBlob
    implements FbWireBlob, DatabaseListener

Input `FbWireBlob` implementation for the version 10 wire protocol.

Since:
  3
Author:
  Mark Rotteveel

### Nested Class Summary

### Nested classes/interfaces inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireBlob

`AbstractFbWireBlob.BlobOpenOperation`

### Nested classes/interfaces inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

`AbstractFbBlob.BlobState`

### Nested classes/interfaces inherited from interface org.firebirdsql.gds.ng.FbBlob

`FbBlob.SeekMode`

### Field Summary

### Fields inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

`exceptionListenerDispatcher`

### Fields inherited from interface org.firebirdsql.gds.ng.FbBlob

`NO_BLOB_ID`

### Constructor Summary

Constructors
`V10InputBlob​(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer, long blobId)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected int` `get​(byte[] b, int off, int len, int minLen)` Default implementation for `AbstractFbBlob.get(byte[], int, int)` and `AbstractFbBlob.get(byte[], int, int, float)`.
`byte[]` `getSegment​(int sizeRequested)` Gets a segment of blob data.
`void` `open()` Opens an existing input blob, or creates an output blob.
`void` `seek​(int offset, FbBlob.SeekMode seekMode)` Performs a seek on a blob with the specified `seekMode` and `offset`.
`protected void` `sendGetSegment​(int len)` Sends the `op_get_segment` request for `len`, without flushing.

### Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireInputBlob

`getBlobId, isOutput, put, putSegment`

### Methods inherited from class org.firebirdsql.gds.ng.wire.AbstractFbWireBlob

`cancelImpl, closeImpl, getBlobInfo, getDatabase, getHandle, getXdrIn, getXdrOut, processOpenResponse, receiveOpenResponse, releaseBlob, releaseResources, sendOpen, setHandle, wrapDeferredResponse`

### Methods inherited from class org.firebirdsql.gds.ng.AbstractFbBlob

`addExceptionListener, cancel, checkBlobClosed, checkBlobOpen, checkDatabaseAttached, checkTransactionActive, clearDatabase, clearDeferredException, clearTransaction, close, createBlobLengthProcessor, detached, detaching, errorOccurred, get, get, getBlobInfo, getBlobParameterBuffer, getKnownBlobInfoItems, getMaximumSegmentSize, getState, getTransaction, isEndingTransaction, isEof, isOpen, length, registerDeferredException, removeExceptionListener, resetEof, setEof, setState, throwAndClearDeferredException, transactionStateChanged, transferDeferredExceptionTo, validateBufferLength, warningReceived, withLock`

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

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

### Methods inherited from interface org.firebirdsql.gds.ng.listeners.DatabaseListener

`detached, detaching, warningReceived`

### Methods inherited from interface org.firebirdsql.gds.ng.listeners.ExceptionListenable

`addExceptionListener, removeExceptionListener`

### Methods inherited from interface org.firebirdsql.gds.ng.FbBlob

`cancel, close, get, get, getBlobId, getBlobInfo, getBlobInfo, getDatabase, getHandle, getMaximumSegmentSize, isEof, isOpen, isOutput, length, put, putSegment`

### Constructor Detail

#### V10InputBlob

    public V10InputBlob​(FbWireDatabase database,
                        FbWireTransaction transaction,
                        BlobParameterBuffer blobParameterBuffer,
                        long blobId)
                 throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

### Method Detail

#### open

    public void open()
              throws java.sql.SQLException

Description copied from interface: `FbBlob`
Opens an existing input blob, or creates an output blob.

Specified by:
  `open` in interface `FbBlob`
Throws:
  `java.sql.SQLException` - If the blob is already open, this is a (closed) output blob and it already has a blobId, the transaction is not active, or a database connection error occurred

#### getSegment

    public byte[] getSegment​(int sizeRequested)
                      throws java.sql.SQLException

Description copied from interface: `FbBlob`
Gets a segment of blob data.

When `sizeRequested` exceeds `FbBlob.getMaximumSegmentSize()` it is silently reduced to the maximum segment size.

Specified by:
  `getSegment` in interface `FbBlob`
Parameters:
  `sizeRequested` - Requested segment size (> 0).
Returns:
  Retrieved segment (size may be less than requested)
Throws:
  `java.sql.SQLException` - If this is an output blob, the blob is closed, the transaction is not active, or a database connection error occurred.
See Also:
  `FbBlob.get(byte[], int, int)`

#### sendGetSegment

    protected void sendGetSegment​(int len)
                           throws java.sql.SQLException,
                                  java.io.IOException

Sends the `op_get_segment` request for `len`, without flushing.

Parameters:
  `len` - requested length (should not exceed `AbstractFbBlob.getMaximumSegmentSize()`, but this is not enforced)
Throws:
  `java.sql.SQLException` - for errors obtaining the XDR output stream
  `java.io.IOException` - for errors writing data to the output stream

#### get

    protected int get​(byte[] b,
                      int off,
                      int len,
                      int minLen)
               throws java.sql.SQLException

Description copied from class: `AbstractFbBlob`
Default implementation for `AbstractFbBlob.get(byte[], int, int)` and `AbstractFbBlob.get(byte[], int, int, float)`.

Specified by:
  `get` in class `AbstractFbBlob`
Parameters:
  `b` - target byte array
  `off` - offset to start
  `len` - number of bytes
  `minLen` - minimum number of bytes to fill (must be `0 < minLen <= len` if `len != 0`
Returns:
  actual number of bytes read; is `0` if `len == 0`, will only be less than `minLen` if end-of-blob is reached
Throws:
  `java.sql.SQLException` - for database access errors, if `off < 0`, `len < 0`, or if `off + len > b.length`, or `len != 0 && (minLen <= 0 || minLen > len)`

#### seek

    public void seek​(int offset,
                     FbBlob.SeekMode seekMode)
              throws java.sql.SQLException

Description copied from interface: `FbBlob`
Performs a seek on a blob with the specified `seekMode` and `offset`.

Firebird only supports seek on stream blobs.

Specified by:
  `seek` in interface `FbBlob`
Parameters:
  `offset` - Offset of the seek, effect depends on value of `seekMode`
  `seekMode` - Value of `FbBlob.SeekMode`
Throws:
  `java.sql.SQLException` - If the blob is closed, the transaction is not active, or a database error occurred.