Class CharStreamHeaderGenerator

java.lang.Object
org.apache.derby.iapi.types.CharStreamHeaderGenerator
All Implemented Interfaces:
StreamHeaderGenerator

public final class CharStreamHeaderGenerator extends 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 final byte[]
    The Derby-specific end-of-stream marker.
    private static final int
    The maximum length that can be encoded by the header.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    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(ObjectOutput out, long byteLength)
    Generates the header for the specified length.
    int
    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(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
    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 Details

    • 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:
  • Constructor Details

    • CharStreamHeaderGenerator

      public CharStreamHeaderGenerator()
  • Method Details

    • expectsCharCount

      public boolean expectsCharCount()
      A byte count is expected.
      Specified by:
      expectsCharCount in interface StreamHeaderGenerator
      Returns:
      false.
    • 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(ObjectOutput out) throws IOException
      Write the EOF marker to an Object stream and return the EOF marker's length
      Throws:
      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(ObjectOutput out, long byteLength) throws 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:
      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(ObjectOutput out, long byteLength) throws 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:
      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.