Package org.apache.derby.impl.drda
Class StandardEXTDTAReaderInputStream
- java.lang.Object
-
- java.io.InputStream
-
- org.apache.derby.impl.drda.EXTDTAReaderInputStream
-
- org.apache.derby.impl.drda.StandardEXTDTAReaderInputStream
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
final class StandardEXTDTAReaderInputStream extends EXTDTAReaderInputStream
Implementation of InputStream which get EXTDTA from the DDMReader. This class can be used to stream LOBs from Network client to the Network server.
-
-
Field Summary
Fields Modifier and Type Field Description private java.io.ByteArrayInputStreamcurrentBufferCurrent data bufferprivate longlengthLength of streamprivate DDMReaderreaderDDMReader.private longremainingBytesRemaining bytes in stream-
Fields inherited from class org.apache.derby.impl.drda.EXTDTAReaderInputStream
isLayerBStream, readStatusByte
-
-
Constructor Summary
Constructors Constructor Description StandardEXTDTAReaderInputStream(DDMReader reader, boolean readStatusByte)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intavailable()Returns the number of bytes that can be read (or skipped over) from this input stream without blocking by the next caller of a method for this input stream.(package private) longgetLength()Returns the number of bytes returned by this stream.private voidnextBuffer()Fetches the next buffer.protected voidonClientSideStreamingError()Cleans up and closes the stream.intread()Reads the next byte of data from the input stream.intread(byte[] b, int off, int len)Reads up tolenbytes of data from the input stream into an array of bytes.-
Methods inherited from class org.apache.derby.impl.drda.EXTDTAReaderInputStream
checkStatus, getStatus, isLayerBStream, isStatusSet, setSuppressException, throwEXTDTATransferException
-
-
-
-
Field Detail
-
length
private final long length
Length of stream
-
reader
private final DDMReader reader
DDMReader. Used to get more data.
-
remainingBytes
private long remainingBytes
Remaining bytes in stream
-
currentBuffer
private java.io.ByteArrayInputStream currentBuffer
Current data buffer
-
-
Constructor Detail
-
StandardEXTDTAReaderInputStream
StandardEXTDTAReaderInputStream(DDMReader reader, boolean readStatusByte) throws DRDAProtocolException
Constructor.- Parameters:
reader- The reader to get data fromreadStatusByte- whether or not to read the trailing Derby-specific EXTDTA stream status byte- Throws:
DRDAProtocolException- if thrown while initializing current buffer.
-
-
Method Detail
-
read
public final int read() throws java.io.IOExceptionReads the next byte of data from the input stream.This subclass of InputStream implements this method by reading the next byte from the current buffer. If there is more data, it will be requested a new buffer from the DDMReader.
- Specified by:
readin classjava.io.InputStream- Returns:
- the next byte of data, or
-1if the end of the stream is reached. - Throws:
java.io.IOException- if an I/O error occurs.- See Also:
InputStream.read()
-
read
public final int read(byte[] b, int off, int len) throws java.io.IOExceptionReads up tolenbytes of data from the input stream into an array of bytes. An attempt is made to read as many aslenbytes, but a smaller number may be read, possibly zero. The number of bytes actually read is returned as an integer. This subclass implements this method by calling this method on the current buffer, which is an instance of ByteArrayInputStream. If the current buffer does not have any data, it will be requested a new buffer from the DDMReader.- Overrides:
readin classjava.io.InputStream- Parameters:
b- the buffer into which the data is read.off- the start offset in arraybat which the data is written.len- the maximum number of bytes to read.- Returns:
- the total number of bytes read into the buffer, or
-1if there is no more data because the end of the stream has been reached. - Throws:
java.io.IOException- if an I/O error occurs.java.lang.NullPointerException- ifbisnull.- See Also:
InputStream.read(byte[], int, int)
-
available
public final int available()
Returns the number of bytes that can be read (or skipped over) from this input stream without blocking by the next caller of a method for this input stream.This subclass implements this method by calling available on the current buffer, which is a ByteInputStreamReader.
- Overrides:
availablein classjava.io.InputStream- Returns:
- the number of bytes that can be read from this input stream without blocking.
-
getLength
final long getLength()
Returns the number of bytes returned by this stream.The length includes data which has been already read at the invocation time, but doesn't include any meta data (like the Derby-specific EXTDTA status byte).
- Returns:
- The number of bytes that will be returned by this stream.
-
nextBuffer
private void nextBuffer() throws java.io.IOExceptionFetches the next buffer.- Throws:
java.io.IOException- if fetching the buffer fails
-
onClientSideStreamingError
protected void onClientSideStreamingError()
Cleans up and closes the stream.- Specified by:
onClientSideStreamingErrorin classEXTDTAReaderInputStream
-
-