|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjava.io.InputStream
org.apache.derby.client.am.ByteArrayCombinerStream
public class ByteArrayCombinerStream
A stream whose source is a list of byte arrays. This class was created when first implementing the JDBC 4 length less overloads in the client driver. The reason was missing support for streaming data with unknown length from the client to the server. The purpose of the stream is to avoid having to repeatedly copy data to grow the byte buffer, or doing a single big copy to combine the byte arrays in the end. This is important for the temporary solution, since we must materialize the stream to find the length anyway. If there is less data available than the specified length, an exception is thrown. Available data is determined by the length of the byte arrays, not the contents of them. A byte array with all 0's is considered valid data. Besides from truncation, this stream does not change the underlying data in any way.
Field Summary | |
---|---|
private int |
arrayIndex
Index of the array we are currently reading from. |
private java.util.ArrayList |
arrays
A list of the arrays to combine. |
private byte[] |
curArray
The array we are currently reading from. |
private long |
gOffset
Global offset into the whole stream. |
private int |
off
The local offset into the current array. |
private long |
specifiedLength
Length of the stream. |
Constructor Summary | |
---|---|
ByteArrayCombinerStream(java.util.ArrayList arraysIn,
long length)
Create a stream whose source is a list of byte arrays. |
Method Summary | |
---|---|
int |
available()
Return the number of available bytes. |
private byte[] |
nextArray()
Fetch the next array to read data from. |
int |
read()
Read a single byte. |
int |
read(byte[] buf,
int offset,
int length)
Reads up to len bytes of data from the input stream into an array of bytes. |
Methods inherited from class java.io.InputStream |
---|
close, mark, markSupported, read, reset, skip |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private final java.util.ArrayList arrays
private final long specifiedLength
private long gOffset
private int arrayIndex
private byte[] curArray
private int off
Constructor Detail |
---|
public ByteArrayCombinerStream(java.util.ArrayList arraysIn, long length)
arraysIn
- an ArrayList
with references to the source
byte arrays. The references are copied to a new
ArrayList
instance.length
- the length of the stream. Never published outside
this object. Note that the length specified can be shorter
than the actual number of bytes in the byte arrays.
java.lang.IllegalArgumentException
- if there is less data available than
specified by length
, or length
is
negative.Method Detail |
---|
public int read() throws java.io.IOException
read
in class java.io.InputStream
-1
if the end-of-stream is reached
java.io.IOException
public int read(byte[] buf, int offset, int length) throws java.io.IOException
len
bytes, but
a smaller number may be read. The number of bytes actually read
is returned as an integer.
read
in class java.io.InputStream
buf
- the array to copy bytes intooffset
- offset into the arraylength
- the maximum number of bytes to read
-1
if end-of-stream
is reached
java.io.IOException
public int available()
available
in class java.io.InputStream
private byte[] nextArray()
ArrayList
is cleared when the array
is "taken out".
byte[]
-object, or null
if there are
no more arrays
|
Built on Thu 2011-03-10 11:54:14+0000, from revision ??? | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |