Class CharStreamHeaderGenerator

  • All Implemented Interfaces:
    StreamHeaderGenerator

    public final class CharStreamHeaderGenerator
    extends java.lang.Object
    implements StreamHeaderGenerator
    Generates stream headers for non-Clob string data types.

    The stream header encodes the byte length of the stream. Since two bytes are used for the header, the maximum encodable length is 65535 bytes. There are three special cases, all handled by encoding zero into the header and possibly appending an EOF-marker to the stream:

    • Unknown length - with EOF marker
    • Length longer than maximum encodable length - with EOF marker
    • Length of zero - no EOF marker
    The length is encoded like this:
                out.writeByte((byte)(byteLength >>> 8));
                out.writeByte((byte)(byteLength >>> 0));
     
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static byte[] DERBY_EOF_MARKER
      The Derby-specific end-of-stream marker.
      private static int MAX_ENCODABLE_LENGTH
      The maximum length that can be encoded by the header.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean expectsCharCount()
      A byte count is expected.
      int generateInto​(byte[] buffer, int offset, long byteLength)
      Generates the header for the specified length and writes it into the provided buffer, starting at the specified offset.
      int generateInto​(java.io.ObjectOutput out, long byteLength)
      Generates the header for the specified length.
      int getMaxHeaderLength()
      Returns the maximum header length.
      int writeEOF​(byte[] buffer, int offset, long byteLength)
      Writes a Derby-specific end-of-stream marker to the buffer for a stream of the specified byte length, if required.
      int writeEOF​(java.io.ObjectOutput out, long byteLength)
      Writes a Derby-specific end-of-stream marker to the destination stream for the specified byte length, if required.
      static int writeEOFMarker​(byte[] buffer, int offset)
      Write the EOF marker to a byte array and return the EOF marker's length
      static int writeEOFMarker​(java.io.ObjectOutput out)
      Write the EOF marker to an Object stream and return the EOF marker's length
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DERBY_EOF_MARKER

        private static final byte[] DERBY_EOF_MARKER
        The Derby-specific end-of-stream marker.
      • MAX_ENCODABLE_LENGTH

        private static final int MAX_ENCODABLE_LENGTH
        The maximum length that can be encoded by the header.
        See Also:
        Constant Field Values
    • Constructor Detail

      • CharStreamHeaderGenerator

        public CharStreamHeaderGenerator()
    • Method Detail

      • writeEOFMarker

        public static int writeEOFMarker​(byte[] buffer,
                                         int offset)
        Write the EOF marker to a byte array and return the EOF marker's length
      • writeEOFMarker

        public static int writeEOFMarker​(java.io.ObjectOutput out)
                                  throws java.io.IOException
        Write the EOF marker to an Object stream and return the EOF marker's length
        Throws:
        java.io.IOException
      • generateInto

        public int generateInto​(byte[] buffer,
                                int offset,
                                long byteLength)
        Generates the header for the specified length and writes it into the provided buffer, starting at the specified offset.
        Specified by:
        generateInto in interface StreamHeaderGenerator
        Parameters:
        buffer - the buffer to write into
        offset - starting offset in the buffer
        byteLength - the length to encode in the header
        Returns:
        The number of bytes written into the buffer.
      • generateInto

        public int generateInto​(java.io.ObjectOutput out,
                                long byteLength)
                         throws java.io.IOException
        Generates the header for the specified length.
        Specified by:
        generateInto in interface StreamHeaderGenerator
        Parameters:
        out - the destination stream
        byteLength - the byte length to encode in the header
        Returns:
        The number of bytes written to the destination stream.
        Throws:
        java.io.IOException - if writing to the destination stream fails
      • writeEOF

        public int writeEOF​(byte[] buffer,
                            int offset,
                            long byteLength)
        Writes a Derby-specific end-of-stream marker to the buffer for a stream of the specified byte length, if required.
        Specified by:
        writeEOF in interface StreamHeaderGenerator
        Parameters:
        buffer - the buffer to write into
        offset - starting offset in the buffer
        byteLength - the byte length of the stream
        Returns:
        Number of bytes written (zero or more).
      • writeEOF

        public int writeEOF​(java.io.ObjectOutput out,
                            long byteLength)
                     throws java.io.IOException
        Writes a Derby-specific end-of-stream marker to the destination stream for the specified byte length, if required.
        Specified by:
        writeEOF in interface StreamHeaderGenerator
        Parameters:
        out - the destination stream
        byteLength - the length of the stream
        Returns:
        Number of bytes written (zero or more).
        Throws:
        java.io.IOException - if writing to the destination stream fails
      • getMaxHeaderLength

        public int getMaxHeaderLength()
        Returns the maximum header length.
        Specified by:
        getMaxHeaderLength in interface StreamHeaderGenerator
        Returns:
        Maximum header length in bytes.