Class ArrayInputStream

java.lang.Object
java.io.InputStream
org.apache.derby.iapi.services.io.ArrayInputStream
All Implemented Interfaces:
Closeable, DataInput, ObjectInput, AutoCloseable, ErrorInfo, ErrorObjectInput, Limit, LimitObjectInput

public final class ArrayInputStream extends InputStream implements LimitObjectInput
An InputStream that allows reading from an array of bytes. The array of bytes that is read from can be changed without having to create a new instance of this class.
  • Field Details

    • pageData

      private byte[] pageData
    • start

      private int start
    • end

      private int end
    • position

      private int position
    • oi

      private ErrorObjectInput oi
  • Constructor Details

    • ArrayInputStream

      public ArrayInputStream()
      Create an ArrayInputStream with a zero length byte array. The position is set to 0 and the limit is the entire byte array.
    • ArrayInputStream

      public ArrayInputStream(byte[] data)
      Create an ArrayInputStream with the passed in data. The position is set to 0 and the limit is the entire byte array.
      Parameters:
      data -
  • Method Details

    • setData

      public void setData(byte[] data)
      Set the array of bytes to be read. Position is set to zero.
    • getData

      public byte[] getData()
      Return a reference to the array of bytes this stream is going to read from so that caller may load it with stuff
    • read

      public int read() throws IOException
      Specified by:
      read in interface ObjectInput
      Specified by:
      read in class InputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Specified by:
      read in interface ObjectInput
      Overrides:
      read in class InputStream
      Throws:
      IOException
    • skip

      public long skip(long count) throws IOException
      Skip as many bytes as possible, but no more than count.
      Specified by:
      skip in interface ObjectInput
      Overrides:
      skip in class InputStream
      Parameters:
      count - the number of bytes to skip
      Returns:
      the number of bytes that were skipped
      Throws:
      IOException
    • getPosition

      public int getPosition()
    • setPosition

      public final void setPosition(int newPosition) throws IOException
      Throws:
      IOException
    • available

      public int available() throws IOException
      Specified by:
      available in interface ObjectInput
      Overrides:
      available in class InputStream
      Throws:
      IOException
    • setLimit

      public void setLimit(int offset, int length) throws IOException
      A setLimit which also sets the position to be offset.
      Throws:
      IOException - limit is out of range
    • setLimit

      public final void setLimit(int length) throws IOException
      Description copied from interface: Limit
      Set the limit of the data that can be read or written. After this call up to and including length bytes can be read from or skipped in the stream.

      On input classes (e.g. InputStreams) any attempt to read or skip beyond the limit will result in an end of file indication (e.g. read() methods returning -1 or throwing EOFException).

      On output classes (e.g. OutputStream) any attempt to write more beyond the limit will result in an EOFException

      Specified by:
      setLimit in interface Limit
      Throws:
      IOException - IOException from some underlying stream
    • clearLimit

      public final int clearLimit()
      Clears the limit by setting the limit to be the entire byte array.
      Specified by:
      clearLimit in interface Limit
      Returns:
      the number of bytes within the limit that have not been read or written.
      See Also:
    • readFully

      public final void readFully(byte[] b) throws IOException
      Specified by:
      readFully in interface DataInput
      Throws:
      IOException
    • readFully

      public final void readFully(byte[] b, int off, int len) throws IOException
      Specified by:
      readFully in interface DataInput
      Throws:
      IOException
    • skipBytes

      public final int skipBytes(int n) throws IOException
      Skip as many bytes as possible, but no more than n.
      Specified by:
      skipBytes in interface DataInput
      Parameters:
      n - the number of bytes to skip
      Returns:
      the number of bytes that were skipped
      Throws:
      IOException
    • readBoolean

      public final boolean readBoolean() throws IOException
      Specified by:
      readBoolean in interface DataInput
      Throws:
      IOException
    • readByte

      public final byte readByte() throws IOException
      Specified by:
      readByte in interface DataInput
      Throws:
      IOException
    • readUnsignedByte

      public final int readUnsignedByte() throws IOException
      Specified by:
      readUnsignedByte in interface DataInput
      Throws:
      IOException
    • readShort

      public final short readShort() throws IOException
      Specified by:
      readShort in interface DataInput
      Throws:
      IOException
    • readUnsignedShort

      public final int readUnsignedShort() throws IOException
      Specified by:
      readUnsignedShort in interface DataInput
      Throws:
      IOException
    • readChar

      public final char readChar() throws IOException
      Specified by:
      readChar in interface DataInput
      Throws:
      IOException
    • readInt

      public final int readInt() throws IOException
      Specified by:
      readInt in interface DataInput
      Throws:
      IOException
    • readLong

      public final long readLong() throws IOException
      Specified by:
      readLong in interface DataInput
      Throws:
      IOException
    • readFloat

      public final float readFloat() throws IOException
      Specified by:
      readFloat in interface DataInput
      Throws:
      IOException
    • readDouble

      public final double readDouble() throws IOException
      Specified by:
      readDouble in interface DataInput
      Throws:
      IOException
    • readLine

      public final String readLine() throws IOException
      Specified by:
      readLine in interface DataInput
      Throws:
      IOException
    • readUTF

      public final String readUTF() throws IOException
      Specified by:
      readUTF in interface DataInput
      Throws:
      IOException
    • readDerbyUTF

      public final int readDerbyUTF(char[][] rawData_array, int utflen) throws IOException
      read in a Derby UTF formated string into a char[].

      This routine inline's the code to read a UTF format string from a byte[] array (pageData), into a char[] array. The string will be read into the char[] array passed into this routine through rawData_array[0] if it is big enough. If it is not big enough a new char[] will be alocated and returned to the caller by putting it into rawData_array[0].

      To see detailed description of the Derby UTF format see the writeExternal() routine of SQLChar.

      The routine returns the number of char's read into the returned char[], note that this length may smaller than the actual length of the char[] array.

      The stream must be positioned on the first user byte when this method is invoked.

      Parameters:
      rawData_array - This parameter uses a element array to implement an in/out function parameter. The char[] array in rawData_array[0] is used to read the data into unless it is not big enough, then a new array is allocated and the old one discarded. In either case on return rawData_array[0] contains the filled in char[] - caller must allow that the array may or may not be different from the one passed in.
      utflen - the byte length of the value, or 0 if unknown
      Returns:
      The the number of valid char's in the returned char[].
      Throws:
      IOException - if an I/O error happens
    • readCompressedInt

      public final int readCompressedInt() throws IOException
      Read a compressed int from the stream.

      Read a compressed int from the stream, which is assumed to have been written by a call to CompressNumber.writeInt().

      Code from CompressedNumber is inlined here so that these fields can be read from the array with a minimum of function calls.

      The format of a compressed int is as follows: Formats are (with x representing value bits):

       1 Byte- 00xxxxxx                            val <= 63 (0x3f)
       2 Byte- 01xxxxxx xxxxxxxx                   val > 63 && <= 16383 (0x3fff)
       4 byte- 1xxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx val > 16383 && <= MAX_INT
       
      Throws:
      IOException - if an I/O error happens
    • readCompressedLong

      public final long readCompressedLong() throws IOException
      Read a compressed long from the stream.

      Read a compressed long from the stream, which is assumed to have been written by a call to CompressNumber.writeLong().

      Code from CompressedNumber is inlined here so that these fields can be read from the array with a minimum of function calls.

      The format of a compressed int is as follows: Formats are (with x representing value bits):

       value ≷= 16383 (0x3fff): 
           2 byte - 00xxxxxx xxxxxxxx 
      
       value > 16383 && <= 0x3fffffff:
           4 byte - 01xxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
      
       value < 0x3fffffff &< <= MAX_LONG:
           8 byte - 1xxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
       
      Throws:
      IOException
    • readObject

      public Object readObject() throws ClassNotFoundException, IOException
      Specified by:
      readObject in interface ObjectInput
      Throws:
      ClassNotFoundException
      IOException
    • getErrorInfo

      public String getErrorInfo()
      Specified by:
      getErrorInfo in interface ErrorInfo
      Specified by:
      getErrorInfo in interface ErrorObjectInput
    • getNestedException

      public Exception getNestedException()
      Specified by:
      getNestedException in interface ErrorInfo
      Specified by:
      getNestedException in interface ErrorObjectInput