Module org.firebirdsql.jaybird
Package org.firebirdsql.gds.ng.wire

# Class AbstractFbWireInputBlob

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

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

Direct Known Subclasses:
  `V10InputBlob`

public abstract class AbstractFbWireInputBlob extends AbstractFbWireBlob

Since:
  3.0
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
Modifier
Constructor
Description
`protected`
`AbstractFbWireInputBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer, long blobId)`

## Method Summary

Modifier and Type
Method
Description
`final long`
`getBlobId()`
Returns the blob id.
`final boolean`
`isOutput()`
`final void`
`put(byte[] b, int off, int len)`
Writes content of `b` starting at `off` for `length` bytes to the blob.
`final void`
`putSegment(byte[] segment)`
Writes a segment of blob data.

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

`addExceptionListener, removeExceptionListener`

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

`cancel, close, get, get, getBlobInfo, getMaximumSegmentSize, getSegment, isEof, isOpen, length, open, seek`

## Constructor Details

### AbstractFbWireInputBlob

protected AbstractFbWireInputBlob(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer, long blobId) throws SQLException

Throws:
  `SQLException`

## Method Details

### getBlobId

public final long getBlobId()
Description copied from interface: `FbBlob`
Returns the blob id.

For output blobs, this will return `FbBlob.NO_BLOB_ID` (`0L`) if the blob wasn't opened yet, or if the blob is deferred opened (client-side only). The value `FbBlob.NO_BLOB_ID` is technically invalid, but Firebird will handle it as an empty blob (both for input and output).

Returns:
  The Firebird blob id

### isOutput

public final boolean isOutput()

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

### putSegment

public final void putSegment(byte[] segment) throws SQLException
Description copied from interface: `FbBlob`
Writes a segment of blob data.

Implementations must handle segment lengths exceeding `FbBlob.getMaximumSegmentSize()` by batching. This method should either call `put(segment, 0, segment.length)`, or produce the same effects as that call.

Passing a section that is length 0 will throw an `SQLException`.

Specified by:
  `putSegment` in interface `FbBlob`
Overrides:
  `putSegment` in class `AbstractFbBlob`
Parameters:
  `segment` - segment to write
Throws:
  `SQLException` - if this is an input blob, the blob is closed, the transaction is not active, the segment is length 0, or a database connection error occurred
See Also:
  - `FbBlob.put(byte[], int, int)`

### put

public final void put(byte[] b, int off, int len) throws SQLException
Description copied from interface: `FbBlob`
Writes content of `b` starting at `off` for `length` bytes to the blob.

Implementations must write all bytes to the blob, using multiple round-trips if necessary.

If the implementation cannot perform writes without additional allocation, it should use at most `DatabaseConnectionProperties.getBlobBufferSize()` as an internal buffer. If the implementation can perform writes without additional allocation, it is recommended it performs reads using (at most) `FbBlob.getMaximumSegmentSize()`.

Parameters:
  `b` - source byte array
  `off` - offset to start
  `len` - number of bytes
Throws:
  `SQLException` - for database access errors, if `off < 0`, `len < 0`, or if `off + len > b.length`