Module org.firebirdsql.jaybird
Package org.firebirdsql.jdbc

# Class FBCachedBlob

java.lang.Object
org.firebirdsql.jdbc.FBCachedBlob

All Implemented Interfaces:
  `Blob`, `FirebirdBlob`

@InternalApi public final class FBCachedBlob extends Object implements FirebirdBlob
This class represents a cached blob field.

This class is internal API of Jaybird. Future versions may radically change, move, or make inaccessible this type. For the public API, refer to the `Blob` and `FirebirdBlob` interfaces.

## Nested Class Summary

## Nested classes/interfaces inherited from interface org.firebirdsql.jdbc.FirebirdBlob

`FirebirdBlob.BlobInputStream, FirebirdBlob.BlobOutputStream`

## Constructor Summary

Constructors
Constructor
Description
`FBCachedBlob(byte[] data)`
Create an instance using the cached data.

## Method Summary

Modifier and Type
Method
Description
`FirebirdBlob`
`detach()`
Detach this blob.
`void`
`free()`
`InputStream`
`getBinaryStream()`
`InputStream`
`getBinaryStream(long pos, long length)`
`byte[]`
`getBytes()`
Gets the byte content of this blob as a byte array.
`byte[]`
`getBytes(long pos, int length)`
`boolean`
`isSegmented()`
Check if blob is segmented.
`long`
`length()`
Get the length of the cached blob field.
`long`
`position(byte[] pattern, long start)`
Find the first entry of the specified pattern.
`long`
`position(Blob pattern, long start)`
Find the first entry of the specified pattern.
`OutputStream`
`setBinaryStream(long pos)`
Set the contents of blob as binary stream.
`int`
`setBytes(long pos, byte[] bytes)`
Set contents of the blob.
`int`
`setBytes(long pos, byte[] bytes, int offset, int len)`
Set the contents of blob.
`void`
`truncate(long length)`
Truncate the blob to specified length.

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

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

## Constructor Details

### FBCachedBlob

public FBCachedBlob(byte[] data)
Create an instance using the cached data.

Parameters:
  `data` - array of bytes containing the cached data.

## Method Details

### detach

public FirebirdBlob detach() throws SQLException
Description copied from interface: `FirebirdBlob`
Detach this blob. This method creates new instance of the same blob database object that is not under result set control. When result set is closed, all associated resources are also released, including open blob streams. This method creates a new instance of blob object with the same blob ID that can be used even when result set is closed.

Note, detached blob will not remember the stream position of this object. This means that you cannot start reading data from the blob, then detach it, and then continue reading. Reading from detached blob will begin at the blob start.

Specified by:
  `detach` in interface `FirebirdBlob`
Returns:
  instance of `FirebirdBlob` that is not under result set control.
Throws:
  `SQLException` - if Blob cannot be detached.

### isSegmented

public boolean isSegmented() throws SQLException
Check if blob is segmented. If Blob is segmented, you cannot use `FirebirdBlob.BlobInputStream.seek(int)` method.

An instance of `FBCachedBlob` returns `false` always.

Specified by:
  `isSegmented` in interface `FirebirdBlob`
Returns:
  `true` if this blob is segmented, otherwise `false`
Throws:
  `SQLException`

### length

public long length() throws SQLException
Get the length of the cached blob field.

Specified by:
  `length` in interface `Blob`
Returns:
  length of the cached blob field or -1 if the field is null.
Throws:
  `SQLException`

### getBytes

public byte[] getBytes(long pos, int length) throws SQLException

Specified by:
  `getBytes` in interface `Blob`
Throws:
  `SQLException`

### getBytes

public byte[] getBytes() throws SQLException
Description copied from interface: `FirebirdBlob`
Gets the byte content of this blob as a byte array.

Specified by:
  `getBytes` in interface `FirebirdBlob`
Returns:
  byte array with blob content (may return `null` for certain cached blobs)
Throws:
  `SQLException` - for database access errors, or if the blob size exceeds the maximum safe array size (i.e. `Integer.MAX_VALUE` - 8)

### position

public long position(byte[] pattern, long start) throws SQLException
Find the first entry of the specified pattern.

Specified by:
  `position` in interface `Blob`
Throws:
  `SQLException` - always, not yet implemented.

### position

public long position(Blob pattern, long start) throws SQLException
Find the first entry of the specified pattern.

Specified by:
  `position` in interface `Blob`
Throws:
  `SQLException` - always, not yet implemented.

### getBinaryStream

public InputStream getBinaryStream() throws SQLException

Specified by:
  `getBinaryStream` in interface `Blob`
Throws:
  `SQLException`

### getBinaryStream

public InputStream getBinaryStream(long pos, long length) throws SQLException

Specified by:
  `getBinaryStream` in interface `Blob`
Throws:
  `SQLException`

### setBytes

public int setBytes(long pos, byte[] bytes) throws SQLException
Set contents of the blob.

Specified by:
  `setBytes` in interface `Blob`
Throws:
  `SQLException` - always, set methods are not relevant in cached state.

### setBytes

public int setBytes(long pos, byte[] bytes, int offset, int len) throws SQLException
Set the contents of blob.

Specified by:
  `setBytes` in interface `Blob`
Throws:
  `SQLException` - always, set methods are not relevant in cached state.

### setBinaryStream

public OutputStream setBinaryStream(long pos) throws SQLException
Set the contents of blob as binary stream.

Specified by:
  `setBinaryStream` in interface `Blob`
Throws:
  `SQLException` - always, set methods are not relevant in cached state.

### truncate

public void truncate(long length) throws SQLException
Truncate the blob to specified length.

Specified by:
  `truncate` in interface `Blob`
Throws:
  `SQLException` - always, truncate is not relevant in cached state.

### free

public void free() throws SQLException

Specified by:
  `free` in interface `Blob`
Throws:
  `SQLException`