Class RawToBinaryFormatStream

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, 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

      Fields 
      Modifier and Type Field Description
      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 java.io.FilterInputStream

        in
    • Constructor Summary

      Constructors 
      Constructor Description
      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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      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 java.io.FilterInputStream

        close, mark, read, reset
      • Methods inherited from class java.io.InputStream

        nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
      • 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