org.firebirdsql.gds.ng.wire

## Class AbstractFbWireOutputBlob

- java.lang.Object
- - org.firebirdsql.gds.ng.AbstractFbBlob
  - - org.firebirdsql.gds.ng.wire.AbstractFbWireBlob
    - - org.firebirdsql.gds.ng.wire.AbstractFbWireOutputBlob

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

Direct Known Subclasses:
  V10OutputBlob

    public abstract class AbstractFbWireOutputBlob
    extends AbstractFbWireBlob

Since:
  3.0
Author:
  Mark Rotteveel

### Nested Class Summary

### 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
`protected` `AbstractFbWireOutputBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer)`

### Method Summary

Methods
`long` `getBlobId()`
`byte[]` `getSegment(int sizeRequested)` Gets a segment of blob data.
`boolean` `isOutput()`
`void` `seek(int offset, FbBlob.SeekMode seekMode)` Performs a seek on a blob with the specified `seekMode` and `offset`.
`protected void` `setBlobId(long blobId)` Sets the blob id.

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

`cancelImpl, closeImpl, getBlobInfo, getDatabase, getHandle, releaseBlob, releaseResources, setHandle`

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

`addExceptionListener, cancel, checkBlobClosed, checkBlobOpen, checkDatabaseAttached, checkTransactionActive, clearDatabase, clearTransaction, close, createBlobLengthProcessor, detached, detaching, getBlobInfo, getBlobParameterBuffer, getMaximumSegmentSize, getSynchronizationObject, getTransaction, isEndingTransaction, isEof, isOpen, length, removeExceptionListener, resetEof, setEof, setOpen, transactionStateChanged, warningReceived`

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

`cancel, close, getBlobInfo, getMaximumSegmentSize, getSynchronizationObject, isEof, isOpen, length, open, putSegment`

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

`addExceptionListener, removeExceptionListener`

### Constructor Detail

#### AbstractFbWireOutputBlob

    protected AbstractFbWireOutputBlob(FbWireDatabase database,
                            FbWireTransaction transaction,
                            BlobParameterBuffer blobParameterBuffer)

### Method Detail

#### getBlobId

    public final long getBlobId()

Returns:
  The Firebird blob id

#### setBlobId

    protected final void setBlobId(long blobId)
                            throws java.sql.SQLException

Sets the blob id.

Parameters:
  `blobId` - Blob id.
Throws:
  `java.sql.SQLException` - If this is an input blob, or if this is an output blob whose blobId was already set.

#### isOutput

    public final boolean isOutput()

Returns:
  `true` if this is an output blob (write only), `false` if this is an input blob (read only)

#### getSegment

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

TODO: Consider allowing this and have the implementation handle longer segments by sending multiple (batched?) requests.

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.

#### seek

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

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.