Class AbstractByteArrayReadBuffer

  • All Implemented Interfaces:
    ReadBuffer, ByteSequence, HashEncoded, Cloneable
    Direct Known Subclasses:
    Binary, ByteArrayReadBuffer

    public abstract class AbstractByteArrayReadBuffer
    extends AbstractReadBuffer
    The AbstractByteArrayReadBuffer abstract class is intended to serve as a base class for the following:
    1. the pre-existing Binary class
    2. a new byte[] based class that does not attempt to add the immutability aspect provided by the Binary class
    3. a new ByteBuffer based class that will work with Java NIO

    This implementation is not intended to be thread safe.

    Author:
    cp 2005.01.18
    • Field Detail

      • m_ab

        protected byte[] m_ab
        The byte array that holds the binary data. This value should not be changed.
      • m_of

        protected int m_of
        Offset into the byte array at which the binary data is located. This value should not be changed.
      • m_cb

        protected int m_cb
        Number of bytes in the byte array that belong to this ReadBuffer object. This value should not be changed.
    • Constructor Detail

      • AbstractByteArrayReadBuffer

        protected AbstractByteArrayReadBuffer()
        Default constructor; intended for deserialization use by subclasses.

        Note that this default constructor leaves the buffer in an invalid state.

      • AbstractByteArrayReadBuffer

        protected AbstractByteArrayReadBuffer​(byte[] ab,
                                              int of,
                                              int cb)
        Construct an AbstractByteArrayReadBuffer on a portion of a byte array.
        Parameters:
        ab - a byte array
        of - an offset into the byte array
        cb - the number of bytes to utilize
        Throws:
        IndexOutOfBoundsException - if of or cb is negative, or of + cb is larger than ab.length
        NullPointerException - if ab is null
    • Method Detail

      • length

        public int length()
        Determine the length of the buffer.
        Returns:
        the number of bytes of data represented by this ReadBuffer
      • byteAt

        public byte byteAt​(int of)
        Returns the byte at the specified offset. An offset ranges from 0 to length() - 1. The first byte of the sequence is at offset 0, the next at offset 1, and so on, as for array indexing.
        Parameters:
        of - the offset (index) of the byte
        Returns:
        the byte at the specified offset in this ReadBuffer
      • copyBytes

        public void copyBytes​(int ofBegin,
                              int ofEnd,
                              byte[] abDest,
                              int ofDest)
        Copies bytes from this ReadBuffer into the destination byte array.

        The first byte to be copied is at offset ofBegin; the last byte to be copied is at offset ofEnd-1 (thus the total number of bytes to be copied is ofEnd - ofBegin). The bytes are copied into the sub-array of abDest starting at offset ofDest and ending at index:

             ofDest + (ofEnd - ofBegin) - 1
         

        This method is the ReadBuffer equivalent of String.getChars(int, int, char[], int). It allows the caller to extract a chunk of bytes into the caller's own array.

        Parameters:
        ofBegin - offset of the first byte in the ReadBuffer to copy
        ofEnd - offset after the last byte in the ReadBuffer to copy
        abDest - the destination byte array
        ofDest - the offset in the destination byte array to copy the first byte to
      • writeTo

        public void writeTo​(OutputStream out)
                     throws IOException
        Write the contents of this ReadBuffer to an OutputStream.
        Parameters:
        out - an OutputStream to write to
        Throws:
        IOException - if an I/O exception occurs
      • writeTo

        public void writeTo​(OutputStream out,
                            int of,
                            int cb)
                     throws IOException
        Write the contents of the ReadBuffer to an OutputStream.
        Parameters:
        out - an OutputStream to write to
        of - the beginning index, inclusive
        cb - the number of bytes to write to an OutputStream
        Throws:
        IOException - if an I/O exception occurs
      • writeTo

        public void writeTo​(DataOutput out)
                     throws IOException
        Write the contents of this ReadBuffer to a DataOutput.
        Parameters:
        out - a DataOutput to write to
        Throws:
        IOException - if an I/O exception occurs
      • writeTo

        public void writeTo​(DataOutput out,
                            int of,
                            int cb)
                     throws IOException
        Write the contents of this ReadBuffer to a DataOutput.
        Parameters:
        out - a DataOutput to write to
        of - the beginning index, inclusive
        cb - the number of bytes to write to a DataOutput
        Throws:
        IOException - if an I/O exception occurs
      • writeTo

        public void writeTo​(ByteBuffer buf)
        Write the contents of the Binary object to a ByteBuffer.
        Parameters:
        buf - a ByteBuffer to write to
      • writeTo

        public void writeTo​(ByteBuffer buf,
                            int of,
                            int cb)
                     throws IOException
        Write the contents of the Binary object to a ByteBuffer.
        Parameters:
        buf - an ByteBuffer to write to
        of - the beginning index, inclusive
        cb - the number of bytes to write to a ByteBuffer
        Throws:
        IOException - if an I/O exception occurs
      • toByteArray

        public byte[] toByteArray​(int of,
                                  int cb)
        Get a portion of the contents of the ReadBuffer as a byte array.

        This method is an equivalent of getReadBuffer(of, cb).toByteArray().

        Specified by:
        toByteArray in interface ReadBuffer
        Overrides:
        toByteArray in class AbstractReadBuffer
        Parameters:
        of - the beginning index, inclusive
        cb - the number of bytes to include in the resulting byte[]
        Returns:
        a byte[] containing the specified portion of this ReadBuffer
      • toBinary

        public Binary toBinary()
        Return a new Binary object that holds the complete contents of this ReadBuffer.

        This is the equivalent of toBinary(0, length()).

        Specified by:
        toBinary in interface ByteSequence
        Specified by:
        toBinary in interface ReadBuffer
        Overrides:
        toBinary in class AbstractReadBuffer
        Returns:
        the contents of this ReadBuffer as a Binary object
      • toBinary

        public Binary toBinary​(int of,
                               int cb)
        Return a Binary object that holds the specified portion of this ReadBuffer.

        This method is an equivalent of getReadBuffer(of, cb).toBinary().

        Specified by:
        toBinary in interface ReadBuffer
        Overrides:
        toBinary in class AbstractReadBuffer
        Parameters:
        of - the beginning index, inclusive
        cb - the number of bytes to include in the Binary object
        Returns:
        a Binary object containing the specified portion of this ReadBuffer
      • toByteBuffer

        public ByteBuffer toByteBuffer()
        Return a read-only ByteBuffer view of this ReadBuffer. This view may or may not reflect any subsequent changes made to the underlying content.
        Returns:
        a read-only ByteBuffer view of this ReadBuffer
      • toByteBuffer

        public ByteBuffer toByteBuffer​(int of,
                                       int cb)
        Return a read-only ByteBuffer view of the specified portion of this ReadBuffer. This view may or may not reflect any subsequent changes made to the underlying content.

        This method is an equivalent of getReadBuffer(of, cb).toByteBuffer().

        Parameters:
        of - the beginning index, inclusive
        cb - the number of bytes to include in the ByteBuffer object
        Returns:
        a read-only ByteBuffer view of the specified portion of this ReadBuffer
      • equals

        public boolean equals​(Object o)
        Compare two ReadBuffer objects for equality.
        Specified by:
        equals in interface ReadBuffer
        Overrides:
        equals in class AbstractReadBuffer
        Parameters:
        o - a ReadBuffer object
        Returns:
        true iff the other ReadBuffer is identical to this
      • resetRange

        protected void resetRange​(int of,
                                  int cb)
        Reset the portion of the byte array the ReadBuffer operates upon.
        Parameters:
        of - an offset into the byte array
        cb - the number of bytes to utilize
        Throws:
        IndexOutOfBoundsException - if of or cb are negative, or of + cb is larger than the buffer's length
      • isByteArrayPrivate

        protected abstract boolean isByteArrayPrivate()
        Determine if the underlying byte[] should be treated as private data.
        Returns:
        true iff the underlying data should not ever be exposed by this object