org.apache.derby.iapi.types
Class RawToBinaryFormatStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by org.apache.derby.iapi.services.io.LimitInputStream
              extended by org.apache.derby.iapi.types.RawToBinaryFormatStream
All Implemented Interfaces:
java.io.Closeable, Limit

public final class RawToBinaryFormatStream
extends LimitInputStream

Stream that takes a raw input stream and converts it to the on-disk format of the binary types by prepending the length of the value.

If the length of the stream is known then it is encoded as the first bytes in the stream in the defined format.
If the length is unknown then the first four bytes will be zero, indicating unknown length.
Note: This stream cannot be re-used. Once end of file is reached, the next read call will throw an EOFException

See Also:
SQLBinary

Field Summary
private  byte[] encodedLength
          Encoding of the length in bytes which will be seen as the first encodedLength.length bytes of this stream.
private  int encodedOffset
          Number of bytes of length encoding.
private  boolean eof
           
private  int length
          The length of the stream.
private  int maximumLength
          The maximum allowed length for the stream.
private  java.lang.String typeName
          The type of the column the stream is inserted into.
 
Fields inherited from class org.apache.derby.iapi.services.io.LimitInputStream
limitInPlace, remainingBytes
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
RawToBinaryFormatStream(java.io.InputStream in, int length)
          Create a binary on-disk stream from the given InputStream.
RawToBinaryFormatStream(java.io.InputStream in, int maximumLength, java.lang.String typeName)
          Create a binary on-disk stream from the given InputStream of unknown length.
 
Method Summary
private  void checkSufficientData()
          JDBC 3.0 (from tutorial book) requires that an input stream has the correct number of bytes in the stream.
 int read()
          Read from the wrapped stream prepending the intial bytes if needed.
 int read(byte[] b, int off, int len)
          Read from the wrapped stream prepending the intial bytes if needed.
 
Methods inherited from class org.apache.derby.iapi.services.io.LimitInputStream
available, clearLimit, markSupported, setInput, setLimit, skip
 
Methods inherited from class java.io.FilterInputStream
close, mark, read, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

encodedOffset

private int encodedOffset
Number of bytes of length encoding.


encodedLength

private byte[] encodedLength
Encoding of the length in bytes which will be seen as the first encodedLength.length bytes of this stream.


eof

private boolean eof

length

private final int length
The length of the stream. Unknown if less than 0.


maximumLength

private final int maximumLength
The maximum allowed length for the stream. No limit if less than 0.


typeName

private final java.lang.String typeName
The type of the column the stream is inserted into. Used for length less streams, null if not in use.

Constructor Detail

RawToBinaryFormatStream

public RawToBinaryFormatStream(java.io.InputStream in,
                               int length)
Create a binary on-disk stream from the given InputStream. The on-disk stream prepends a length encoding, and validates that the actual length of the stream matches the specified length (as according to JDBC 3.0).

Parameters:
in - application's raw binary stream passed into JDBC layer
length - length of the stream
Throws:
java.lang.IllegalArgumentException - if length is negative. This exception should never be exposed to the user, and seeing it means a programming error exists in the code.

RawToBinaryFormatStream

public RawToBinaryFormatStream(java.io.InputStream in,
                               int maximumLength,
                               java.lang.String typeName)
Create a binary on-disk stream from the given InputStream of unknown length. A limit is placed on the maximum length of the stream.

Parameters:
in - the application stream
maximumLength - maximum length of the column data is inserted into
typeName - type name for the column data is inserted into
Throws:
java.lang.IllegalArgumentException - if maximum length is negative, or type name is null. This exception should never be exposed to the user, and seeing it means a programming error exists in the code. Although a missing type name is not critical, an exception is is thrown to signal the intended use of this constructor.
Method Detail

read

public int read()
         throws java.io.IOException
Read from the wrapped stream prepending the intial bytes if needed. If stream has been read, and eof reached, in that case any subsequent read will throw an EOFException

Overrides:
read in class LimitInputStream
Throws:
java.io.IOException

checkSufficientData

private void checkSufficientData()
                          throws java.io.IOException
JDBC 3.0 (from tutorial book) requires that an input stream has the correct number of bytes in the stream.

Throws:
java.io.IOException

read

public int read(byte[] b,
                int off,
                int len)
         throws java.io.IOException
Read from the wrapped stream prepending the intial bytes if needed. If stream has been read, and eof reached, in that case any subsequent read will throw an EOFException

Overrides:
read in class LimitInputStream
Throws:
java.io.IOException

Built on Thu 2012-03-29 21:53:33+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.