Class PofBufferReader

    • Field Detail

      • 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 Detail

      • 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 Detail

      • 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:
        PofSerializer.deserialize(PofReader)
      • 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