Top Description Fields Constructors Methods
org.apache.derby.client.am

pack-priv Class BlobLocatorInputStream

extends InputStream
Class Inheritance
Imports
java.io.IOException, .InputStream, org.apache.derby.shared.common.sanity.SanityManager

An InputStream that will use an locator to fetch the Blob value from the server.

Closing a ByteArrayInputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.

This InputStream implementation 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

Modifier and TypeField and Description
private final ClientBlob
blob

The Blob to be accessed.

private final ClientConnection
connection

Connection used to read Blob from server.

private long
currentPos

Current position in the underlying Blob.

private final long
maxPos

Position in Blob where to stop reading.

Constructor Summary

AccessConstructor and Description
pack-priv
BlobLocatorInputStream(ClientConnection
connection to be used to read the Blob value from the server
connection
,
ClientBlob
Blob object that contains locator for the Blob value on the server.
blob
)

Create an InputStream for reading the Blob value represented by the given locator based Blob object.

pack-priv
BlobLocatorInputStream(ClientConnection
connection to be used to read the Blob value from the server
connection
,
ClientBlob
Blob object that contains locator for the Blob value on the server.
blob
,
long
the position in the Blob of the first byte to read.
position
,
long
the maximum number of bytes to read from the Blob.
length
)

Create an InputStream for reading the Blob value represented by the given locator based Blob object.

Method Summary

Modifier and TypeMethod and Description
public int
read()

Implements abstract java.io.InputStream.read.

Reads the next byte of data from the input stream.
public int
read(byte[]
the buffer into which the data is read.
b
,
int
the start offset in array b at which the data is written.
off
,
int
the maximum number of bytes to read.
len
)

Overrides java.io.InputStream.read.

Reads up to len bytes of data from the input stream into an array of bytes.
private byte[]

Returns:

byte[] containing the read bytes
readBytes
(int
number of bytes to read
len
)

Read the next len bytes of the Blob value from the server.

Inherited from java.io.InputStream:
availableclosemarkmarkSupportednullInputStreamreadreadAllBytesreadNBytesreadNBytesresetskipskipNBytestransferTo

Field Detail

blobback to summary
private final ClientBlob blob

The Blob to be accessed.

connectionback to summary
private final ClientConnection connection

Connection used to read Blob from server.

currentPosback to summary
private long currentPos

Current position in the underlying Blob. Blobs are indexed from 1

maxPosback to summary
private final long maxPos

Position in Blob where to stop reading. maxPos starts counting from 1.

Constructor Detail

BlobLocatorInputStreamback to summary
pack-priv BlobLocatorInputStream(ClientConnection connection, ClientBlob blob) throws SqlException

Create an InputStream for reading the Blob value represented by the given locator based Blob object.

Parameters
connection:ClientConnection

connection to be used to read the Blob value from the server

blob:ClientBlob

Blob object that contains locator for the Blob value on the server.

Exceptions
SqlException:
if an error occurs when obtaining the length of the Blob.
BlobLocatorInputStreamback to summary
pack-priv BlobLocatorInputStream(ClientConnection connection, ClientBlob blob, long position, long length) throws SqlException

Create an InputStream for reading the Blob value represented by the given locator based Blob object.

Parameters
connection:ClientConnection

connection to be used to read the Blob value from the server

blob:ClientBlob

Blob object that contains locator for the Blob value on the server.

position:long

the position in the Blob of the first byte to read.

length:long

the maximum number of bytes to read from the Blob.

Exceptions
SqlException:
if an error occurs when obtaining the length of the Blob.

Method Detail

readback to summary
public int read() throws IOException

Implements abstract java.io.InputStream.read.

Doc from java.io.InputStream.read.

Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

Returns:int

the next byte of data, or -1 if the end of the stream is reached.

Exceptions
IOException:
if an I/O error occurs.
See Also
This method fetches one byte at a time from the server. For more efficient retrieval, use #read(byte[]).
readback to summary
public int read(byte[] b, int off, int len) throws IOException

Overrides java.io.InputStream.read.

Doc from java.io.InputStream.read.

Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.

This method blocks until input data is available, end of file is detected, or an exception is thrown.

If len is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at end of file, the value -1 is returned; otherwise, at least one byte is read and stored into b.

The first byte read is stored into element b[off], the next one into b[off+1], and so on. The number of bytes read is, at most, equal to len. Let k be the number of bytes actually read; these bytes will be stored in elements b[off] through b[off+k-1], leaving elements b[off+k] through b[off+len-1] unaffected.

In every case, elements b[0] through b[off-1] and elements b[off+len] through b[b.length-1] are unaffected.

Parameters
b:byte[]

the buffer into which the data is read.

off:int

the start offset in array b at which the data is written.

len:int

the maximum number of bytes to read.

Returns:int

the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.

Exceptions
IOException:
If the first byte cannot be read for any reason other than end of file, or if the input stream has been closed, or if some other I/O error occurs.
See Also
java.io.InputStream#read(byte[], int, int)
readBytesback to summary
private byte[] readBytes(int len) throws IOException

Read the next len bytes of the Blob value from the server.

Parameters
len:int

number of bytes to read

Returns:byte[]

byte[] containing the read bytes

Exceptions
IOException:
Wrapped SqlException if reading from server fails.