Class PofBufferReader

All Implemented Interfaces:
PofConstants, PofReader
Direct Known Subclasses:
PofBufferReader.UserTypeReader

public class PofBufferReader extends PofHelper implements PofReader
PofReader implementation that reads POF-encoded data from a BufferInput.
Since:
Coherence 3.2
Author:
cp 2006.07.14
  • Field Details

    • m_in

      protected ReadBuffer.BufferInput m_in
      The BufferInput containing the POF stream.
    • m_ctx

      protected PofContext m_ctx
      The PofContext to use to realize user data types as Java objects.
    • m_arrayRefs

      protected LongArray m_arrayRefs
      Lazily-constructed mapping of identities to references.
  • Constructor Details

    • PofBufferReader

      public PofBufferReader(ReadBuffer.BufferInput in, PofContext ctx)
      Construct a new PofBufferReader that will read a POF stream from the passed BufferInput object.
      Parameters:
      in - a BufferInput object
      ctx - the PofContext
    • PofBufferReader

      protected PofBufferReader()
  • Method Details

    • readBoolean

      public boolean readBoolean(int iProp) throws IOException
      Read a boolean property from the POF stream.
      Specified by:
      readBoolean in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the boolean property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readByte

      public byte readByte(int iProp) throws IOException
      Read a byte property from the POF stream.
      Specified by:
      readByte in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the byte property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readChar

      public char readChar(int iProp) throws IOException
      Read a char property from the POF stream.
      Specified by:
      readChar in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the char property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readShort

      public short readShort(int iProp) throws IOException
      Read a short property from the POF stream.
      Specified by:
      readShort in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the short property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readInt

      public int readInt(int iProp) throws IOException
      Read a int property from the POF stream.
      Specified by:
      readInt in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the int property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readLong

      public long readLong(int iProp) throws IOException
      Read a long property from the POF stream.
      Specified by:
      readLong in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the long property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readFloat

      public float readFloat(int iProp) throws IOException
      Read a float property from the POF stream.
      Specified by:
      readFloat in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the float property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readDouble

      public double readDouble(int iProp) throws IOException
      Read a double property from the POF stream.
      Specified by:
      readDouble in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the double property value, or zero if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readBooleanArray

      public boolean[] readBooleanArray(int iProp) throws IOException
      Read a boolean[] property from the POF stream.
      Specified by:
      readBooleanArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the boolean[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readByteArray

      public byte[] readByteArray(int iProp) throws IOException
      Read a byte[] property from the POF stream.
      Specified by:
      readByteArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the byte[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readCharArray

      public char[] readCharArray(int iProp) throws IOException
      Read a char[] property from the POF stream.
      Specified by:
      readCharArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the char[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readShortArray

      public short[] readShortArray(int iProp) throws IOException
      Read a short[] property from the POF stream.
      Specified by:
      readShortArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the short[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readIntArray

      public int[] readIntArray(int iProp) throws IOException
      Read a int[] property from the POF stream.
      Specified by:
      readIntArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the int[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readLongArray

      public long[] readLongArray(int iProp) throws IOException
      Read a long[] property from the POF stream.
      Specified by:
      readLongArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the long[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readFloatArray

      public float[] readFloatArray(int iProp) throws IOException
      Read a float[] property from the POF stream.
      Specified by:
      readFloatArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the float[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readDoubleArray

      public double[] readDoubleArray(int iProp) throws IOException
      Read a double[] property from the POF stream.
      Specified by:
      readDoubleArray in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the double[] property value; may be null
      Throws:
      IOException - if an I/O error occurs
    • readBigInteger

      public BigInteger readBigInteger(int iProp) throws IOException
      Read a BigInteger from the POF stream.
      Specified by:
      readBigInteger in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the BigInteger property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawQuad

      public RawQuad readRawQuad(int iProp) throws IOException
      Read a RawQuad from the POF stream.
      Specified by:
      readRawQuad in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawQuad property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readBigDecimal

      public BigDecimal readBigDecimal(int iProp) throws IOException
      Read a BigDecimal from the POF stream.
      Specified by:
      readBigDecimal in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the BigDecimal property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readBinary

      public Binary readBinary(int iProp) throws IOException
      Read a Binary from the POF stream.
      Specified by:
      readBinary in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the Binary property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readString

      public String readString(int iProp) throws IOException
      Read a String from the POF stream.
      Specified by:
      readString in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the String property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readDate

      public Date readDate(int iProp) throws IOException
      Read a java.util.Date from the POF stream.
      Specified by:
      readDate in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the Date property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readLocalDate

      public LocalDate readLocalDate(int iProp) throws IOException
      Description copied from interface: PofReader
      Read a java.time.LocalDate from the POF stream.
      Specified by:
      readLocalDate in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the LocalDate property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readLocalDateTime

      public LocalDateTime readLocalDateTime(int iProp) throws IOException
      Description copied from interface: PofReader
      Read a java.time.LocalDateTime from the POF stream.
      Specified by:
      readLocalDateTime in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the LocalDateTime property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readLocalTime

      public LocalTime readLocalTime(int iProp) throws IOException
      Description copied from interface: PofReader
      Read a java.time.LocalTime from the POF stream.
      Specified by:
      readLocalTime in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the LocalTime property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readOffsetDateTime

      public OffsetDateTime readOffsetDateTime(int iProp) throws IOException
      Description copied from interface: PofReader
      Read a java.time.OffsetDateTime from the POF stream.
      Specified by:
      readOffsetDateTime in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the OffsetDateTime property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readOffsetTime

      public OffsetTime readOffsetTime(int iProp) throws IOException
      Description copied from interface: PofReader
      Read a java.time.OffsetTime from the POF stream.
      Specified by:
      readOffsetTime in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the OffsetTime property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawDate

      public RawDate readRawDate(int iProp) throws IOException
      Read a RawDate from the POF stream. The RawDate class contains the raw date information that was carried in the POF stream.
      Specified by:
      readRawDate in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawDate property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawTime

      public RawTime readRawTime(int iProp) throws IOException
      Read a RawTime from the POF stream. The RawTime class contains the raw time information that was carried in the POF stream, including raw timezone information.
      Specified by:
      readRawTime in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawTime property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawDateTime

      public RawDateTime readRawDateTime(int iProp) throws IOException
      Read a RawDateTime from the POF stream. The RawDateTime class contains the raw date and time information that was carried in the POF stream, including raw timezone information.
      Specified by:
      readRawDateTime in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawDateTime property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawYearMonthInterval

      public RawYearMonthInterval readRawYearMonthInterval(int iProp) throws IOException
      Read a RawYearMonthInterval from the POF stream. The RawYearMonthInterval class contains the raw year-month interval information that was carried in the POF stream.
      Specified by:
      readRawYearMonthInterval in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawYearMonthInterval property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawTimeInterval

      public RawTimeInterval readRawTimeInterval(int iProp) throws IOException
      Read a RawTimeInterval from the POF stream. The RawTimeInterval class contains the raw time interval information that was carried in the POF stream.
      Specified by:
      readRawTimeInterval in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawTimeInterval property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readRawDayTimeInterval

      public RawDayTimeInterval readRawDayTimeInterval(int iProp) throws IOException
      Read a RawDayTimeInterval from the POF stream. The RawDayTimeInterval class contains the raw year-month interval information that was carried in the POF stream.
      Specified by:
      readRawDayTimeInterval in interface PofReader
      Parameters:
      iProp - the property index to read
      Returns:
      the RawDayTimeInterval property value, or null if no value was available in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readObjectArray

      public Object[] readObjectArray(int iProp, Object[] ao) throws IOException
      Read an array of object values.
      Specified by:
      readObjectArray in interface PofReader
      Parameters:
      iProp - the property index to read
      ao - the optional array to use to store the values, or to use as a typed template for creating an array to store the values, following the documentation for Collection.toArray()
      Returns:
      an array of object values, or null if no array is passed and there is no array data in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readArray

      public <T> T[] readArray(int iProp, IntFunction<T[]> supplier) throws IOException
      Read an array of values.
      Specified by:
      readArray in interface PofReader
      Type Parameters:
      T - the value type
      Parameters:
      iProp - the property index to read
      supplier - the supplier to use to create the array, typically an array constructor reference (i.e. String[]::new)
      Returns:
      an array of object values, or an empty array if there is no array data in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readLongArray

      public LongArray readLongArray(int iProp, LongArray array) throws IOException
      Read a LongArray of object values.
      Specified by:
      readLongArray in interface PofReader
      Parameters:
      iProp - the property index to read
      array - the optional LongArray object to use to store the values
      Returns:
      a LongArray of object values, or null if no LongArray is passed and there is no array data in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readCollection

      public <T, C extends Collection<T>> C readCollection(int iProp, C coll) throws IOException
      Read a Collection of object values from the POF stream.
      Specified by:
      readCollection in interface PofReader
      Type Parameters:
      T - the object value type
      C - the collection type
      Parameters:
      iProp - the property index to read
      coll - the optional Collection to use to store the values
      Returns:
      a Collection of object values, or null if no Collection is passed and there is no collection data in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • readMap

      public <K, V, M extends Map<K, V>> M readMap(int iProp, M map) throws IOException
      Read a Map of key/value pairs from the POF stream.
      Specified by:
      readMap in interface PofReader
      Type Parameters:
      K - the key type
      V - the value type
      M - the map type
      Parameters:
      iProp - the property index to read
      map - the optional Map to initialize
      Returns:
      a Map of key/value pairs object values, or null if no Map is passed and there is no key/value data in the POF stream
      Throws:
      IOException - if an I/O error occurs
    • getPofContext

      public PofContext getPofContext()
      Return the PofContext object used by this PofReader to deserialize user types from a POF stream.
      Specified by:
      getPofContext in interface PofReader
      Returns:
      the PofContext object that contains user type meta-data
    • setPofContext

      public void setPofContext(PofContext ctx)
      Configure the PofContext object used by this PofReader to deserialize user types from a POF stream.

      Note: this is an advanced method that should be used with care. For example, if this method is being used to switch to another PofContext mid-POF stream, it is important to eventually restore the original PofContext. For example:

       PofContext ctxOrig = reader.getPofContext();
       try
           {
           // switch to another PofContext
           PofContext ctxNew = ...;
           reader.setContext(ctxNew);
      
           // read POF data using the reader
           }
       finally
           {
           // restore the original PofContext
           reader.setPofContext(ctxOrig);
           }
       
      Specified by:
      setPofContext in interface PofReader
      Parameters:
      ctx - the new PofContext; must not be null
    • readObject

      public <T> T readObject(int iProp) throws IOException
      Read a property of any type, including a user type, from the POF stream.
      Specified by:
      readObject in interface PofReader
      Type Parameters:
      T - the object type
      Parameters:
      iProp - the property index to read
      Returns:
      the Object value; may be null
      Throws:
      IOException - if an I/O error occurs
    • getUserTypeId

      public int getUserTypeId()
      Determine the user type that is currently being parsed.
      Specified by:
      getUserTypeId in interface PofReader
      Returns:
      the user type information, or -1 if the PofReader is not currently parsing a user type
    • getVersionId

      public int getVersionId()
      Determine the version identifier of the user type that is currently being parsed.
      Specified by:
      getVersionId in interface PofReader
      Returns:
      the integer version ID read from the POF stream; always non-negative
    • registerIdentity

      public void registerIdentity(Object o)
      Register an identity for a newly created user type instance.

      If identity/reference types are enabled, an identity is used to uniquely identify a user type instance within a POF stream. The identity immediately proceeds the instance value in the POF stream and can be used later in the stream to reference the instance.

      PofSerializer implementations must call this method with the user type instance instantiated during deserialization prior to reading any properties of the instance which are user type instances themselves.

      Specified by:
      registerIdentity in interface PofReader
      Parameters:
      o - the object to register the identity for
      See Also:
    • createNestedPofReader

      public PofReader createNestedPofReader(int iProp) throws IOException
      Obtain a PofReader that can be used to read a set of properties from a single property of the current user type. The returned PofReader is only valid from the time that it is returned until the next call is made to this PofReader.
      Specified by:
      createNestedPofReader in interface PofReader
      Parameters:
      iProp - the property index to read from
      Returns:
      a PofReader that reads its contents from a single property of this PofReader
      Throws:
      IOException - if an I/O error occurs
    • readRemainder

      public Binary readRemainder() throws IOException
      Read all remaining indexed properties of the current user type from the POF stream. As part of reading in a user type, this method must be called by the PofSerializer that is reading the user type, or the read position within the POF stream will be corrupted.

      Subsequent calls to the various readXYZ methods of this interface will fail after this method is called.

      Specified by:
      readRemainder in interface PofReader
      Returns:
      a Binary object containing zero or more indexed properties in binary POF encoded form
      Throws:
      IOException - if an I/O error occurs
    • advanceTo

      protected boolean advanceTo(int iProp) throws IOException
      Advance through the POF stream until the specified property is found. If the property is found, return true, otherwise return false and advance to the first property that follows the specified property.
      Parameters:
      iProp - the index of the property to advance to
      Returns:
      true if the property is found
      Throws:
      IllegalStateException - if the POF stream has already advanced past the desired property
      IOException - if an I/O error occurs
    • complete

      protected void complete(int iProp) throws IOException
      Register the completion of the parsing of a value.
      Parameters:
      iProp - the property index
      Throws:
      IOException - if an I/O error occurs
    • getParentParser

      protected PofBufferReader getParentParser()
      If this parser is contextually within a user type, obtain the parser which created this parser in order to parse the user type.
      Returns:
      the parser for the context within which this parser is operating
    • ensureReferenceRegistry

      protected LongArray ensureReferenceRegistry()
      Obtain the registry for identity-reference pairs, creating it if necessary.
      Returns:
      the identity-reference registry, never null
    • registerIdentity

      protected void registerIdentity(int nId, Object oValue)
      Register the passed value with the passed identity.
      Parameters:
      nId - the identity within the POF stream of the object
      oValue - the object to associate with the passed identity
      Throws:
      IllegalArgumentException - if the specified identity is already registered with a different object
    • lookupIdentity

      protected Object lookupIdentity(int nId) throws IOException
      Look up the specified identity and return the object to which it refers.
      Parameters:
      nId - the identity
      Returns:
      the object registered under that identity
      Throws:
      IOException - if the requested identity is not registered
    • readAsObject

      protected Object readAsObject(int nType) throws IOException
      Read a POF value as an Object.
      Parameters:
      nType - the type identifier of the value
      Returns:
      an Object value
      Throws:
      IOException - if an I/O error occurs
    • readAsUniformObject

      protected Object readAsUniformObject(int nType) throws IOException
      Read a POF value in a uniform array/map as an Object.
      Parameters:
      nType - the type identifier of the value
      Returns:
      an Object value
      Throws:
      IOException - if an I/O error occurs
    • readAsObjectArray

      protected Object[] readAsObjectArray(int nType, Object[] ao) throws IOException
      Read a POF value as an Object array.
      Parameters:
      nType - the type identifier of the value
      ao - the optional array to use to store the values, or to use as a typed template for creating an array to store the values, following the documentation for Collection.toArray()
      Returns:
      an Object array
      Throws:
      IOException - if an I/O error occurs
    • readAsTypedObjectArray

      protected <T> T[] readAsTypedObjectArray(int nType, IntFunction<T[]> factory) throws IOException
      Read a POF value as an Object array.
      Type Parameters:
      T - the identifier type
      Parameters:
      nType - the type identifier of the value
      factory - the optional factory to use to initialize the array
      Returns:
      an Object array
      Throws:
      IOException - if an I/O error occurs
    • readBinary

      protected static Binary readBinary(ReadBuffer.BufferInput in) throws IOException
      Read a Binary object from the specified BufferInput in an optimal way, depending on the existence of an enclosing ReadBuffer.
      Parameters:
      in - a BufferInput to read from
      Returns:
      a Binary object
      Throws:
      IOException - if an I/O error occurs