Package org.apache.derby.client.am
Class BlobLocatorInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.apache.derby.client.am.BlobLocatorInputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
class BlobLocatorInputStream extends java.io.InputStreamAnInputStreamthat will use an locator to fetch the Blob value from the server.Closing a
ByteArrayInputStreamhas no effect. The methods in this class can be called after the stream has been closed without generating anIOException.This
InputStreamimplementation is pretty basic. No buffering of data is done. Hence, for efficiency #read(byte[]) should be used instead of #read(). Marks are not supported, but it should be pretty simple to extend the implementation to support this. A more efficient skip implementation should also be straight-forward.
-
-
Field Summary
Fields Modifier and Type Field Description private ClientBlobblobThe Blob to be accessed.private ClientConnectionconnectionConnection used to read Blob from server.private longcurrentPosCurrent position in the underlying Blob.private longmaxPosPosition in Blob where to stop reading.
-
Constructor Summary
Constructors Constructor Description BlobLocatorInputStream(ClientConnection connection, ClientBlob blob)Create anInputStreamfor reading theBlobvalue represented by the given locator basedBlobobject.BlobLocatorInputStream(ClientConnection connection, ClientBlob blob, long position, long length)Create anInputStreamfor reading theBlobvalue represented by the given locator basedBlobobject.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intread()intread(byte[] b, int off, int len)private byte[]readBytes(int len)Read the nextlenbytes of theBlobvalue from the server.
-
-
-
Field Detail
-
connection
private final ClientConnection connection
Connection used to read Blob from server.
-
blob
private final ClientBlob blob
The Blob to be accessed.
-
currentPos
private long currentPos
Current position in the underlying Blob. Blobs are indexed from 1
-
maxPos
private final long maxPos
Position in Blob where to stop reading. maxPos starts counting from 1.
-
-
Constructor Detail
-
BlobLocatorInputStream
BlobLocatorInputStream(ClientConnection connection, ClientBlob blob) throws SqlException
Create anInputStreamfor reading theBlobvalue represented by the given locator basedBlobobject.- Parameters:
connection- connection to be used to read theBlobvalue from the serverblob-Blobobject that contains locator for theBlobvalue on the server.- Throws:
SqlException- if an error occurs when obtaining the length of theBlob.
-
BlobLocatorInputStream
BlobLocatorInputStream(ClientConnection connection, ClientBlob blob, long position, long length) throws SqlException
Create anInputStreamfor reading theBlobvalue represented by the given locator basedBlobobject.- Parameters:
connection- connection to be used to read theBlobvalue from the serverblob-Blobobject that contains locator for theBlobvalue on the server.position- the position in theBlobof the first byte to read.length- the maximum number of bytes to read from theBlob.- Throws:
SqlException- if an error occurs when obtaining the length of theBlob.
-
-
Method Detail
-
read
public int read() throws java.io.IOException- Specified by:
readin classjava.io.InputStream- Throws:
java.io.IOException- See Also:
This method fetches one byte at a time from the server. For more efficient retrieval, use #read(byte[]).
-
read
public int read(byte[] b, int off, int len) throws java.io.IOException- Overrides:
readin classjava.io.InputStream- Throws:
java.io.IOException- See Also:
InputStream.read(byte[], int, int)
-
readBytes
private byte[] readBytes(int len) throws java.io.IOExceptionRead the nextlenbytes of theBlobvalue from the server.- Parameters:
len- number of bytes to read- Returns:
byte[]containing the read bytes- Throws:
java.io.IOException- Wrapped SqlException if reading from server fails.
-
-