Class CompositeByteArray

  • All Implemented Interfaces:
    ByteArray, IoAbsoluteReader, IoAbsoluteWriter

    public final class CompositeByteArray
    extends Object
    A ByteArray composed of other ByteArrays. Optimized for fast relative access via cursors. Absolute access methods are provided, but may perform poorly. TODO: Write about laziness of cursor implementation - how movement doesn't happen until actual get/put.
    Author:
    Apache MINA Project
    • Constructor Detail

      • CompositeByteArray

        public CompositeByteArray()
        Creates a new instance of CompositeByteArray.
      • CompositeByteArray

        public CompositeByteArray​(ByteArrayFactory byteArrayFactory)
        Creates a new instance of CompositeByteArray.
        Parameters:
        byteArrayFactory - The factory used to create the ByteArray objects
    • Method Detail

      • addFirst

        public void addFirst​(ByteArray ba)
        Adds the specified ByteArray to the first position in the list
        Parameters:
        ba - The ByteArray to add to the list
      • removeFirst

        public ByteArray removeFirst()
        Remove the first ByteArray in the list
        Returns:
        The first ByteArray in the list
      • removeTo

        public ByteArray removeTo​(int index)
        Remove component ByteArrays to the given index (splitting them if necessary) and returning them in a single ByteArray. The caller is responsible for freeing the returned object. TODO: Document free behaviour more thoroughly.
        Parameters:
        index - The index from where we will remove bytes
        Returns:
        The resulting byte aaay
      • addLast

        public void addLast​(ByteArray ba)
        Adds the specified ByteArray to the end of the list
        Parameters:
        ba - The ByteArray to add to the end of the list
      • removeLast

        public ByteArray removeLast()
        Removes the last ByteArray in the list
        Returns:
        The ByteArray that was removed
      • free

        public void free()
        Remove any resources associated with this object. Using the object after this method is called may result in undefined behaviour.
      • getIoBuffers

        public Iterable<IoBuffer> getIoBuffers()
        Returns:
        the sequence of IoBuffers that back this array. Compared to getSingleIoBuffer(), this method should be relatively efficient for all implementations.
      • getSingleIoBuffer

        public IoBuffer getSingleIoBuffer()
        Returns:
        a single IoBuffer that backs this array. Some implementations may initially have data split across multiple buffers, so calling this method may require a new buffer to be allocated and populated.
      • cursor

        public ByteArray.Cursor cursor()
        Returns:
        a cursor starting at index 0 (which may not be the start of the array).
      • cursor

        public ByteArray.Cursor cursor​(int index)
        Parameters:
        index - The starting point
        Returns:
        a cursor starting at the given index.
      • cursor

        public ByteArray.Cursor cursor​(int index,
                                       CompositeByteArray.CursorListener listener)
        Get a cursor starting at the given index and with the given listener.
        Parameters:
        index - The position of the array to start the Cursor at
        listener - The listener for the Cursor that is returned
        Returns:
        The created Cursor
      • slice

        public ByteArray slice​(int index,
                               int length)
        Creates an array with a view of part of this array.
        Parameters:
        index - The starting position
        length - The number of bytes to copy
        Returns:
        The ByteArray that is a view on the original array
      • get

        public byte get​(int index)
        Parameters:
        index - The starting position
        Returns:
        a byte from the given index.
      • put

        public void put​(int index,
                        byte b)
        Puts a byte at the given index.
        Parameters:
        index - The position
        b - The byte to put
      • get

        public void get​(int index,
                        IoBuffer bb)
        Gets enough bytes to fill the IoBuffer from the given index.
        Parameters:
        index - The starting position
        bb - The IoBuffer that will be filled with the bytes
      • put

        public void put​(int index,
                        IoBuffer bb)
        Puts bytes from the IoBuffer at the given index.
        Parameters:
        index - The position
        bb - The bytes to put
      • first

        public int first()
        Returns:
        the index of the first byte that can be accessed.
      • last

        public int last()
        Returns:
        the index after the last byte that can be accessed.
      • order

        public ByteOrder order()
        Returns:
        the order of the bytes.
      • order

        public void order​(ByteOrder order)
        Set the byte order of the array.
        Parameters:
        order - The ByteOrder to use
      • getShort

        public short getShort​(int index)
        Parameters:
        index - The starting position
        Returns:
        a short from the given index.
      • putShort

        public void putShort​(int index,
                             short s)
        Puts a short at the given index.
        Parameters:
        index - The position
        s - The short to put
      • getInt

        public int getInt​(int index)
        Parameters:
        index - The starting position
        Returns:
        an int from the given index.
      • putInt

        public void putInt​(int index,
                           int i)
        Puts an int at the given index.
        Parameters:
        index - The position
        i - The int to put
      • getLong

        public long getLong​(int index)
        Parameters:
        index - The starting position
        Returns:
        a long from the given index.
      • putLong

        public void putLong​(int index,
                            long l)
        Puts a long at the given index.
        Parameters:
        index - The position
        l - The long to put
      • getFloat

        public float getFloat​(int index)
        Parameters:
        index - The starting position
        Returns:
        a float from the given index.
      • putFloat

        public void putFloat​(int index,
                             float f)
        Puts a float at the given index.
        Parameters:
        index - The position
        f - The float to put
      • getDouble

        public double getDouble​(int index)
        Parameters:
        index - The starting position
        Returns:
        a double from the given index.
      • putDouble

        public void putDouble​(int index,
                              double d)
        Puts a double at the given index.
        Parameters:
        index - The position
        d - The doubvle to put
      • getChar

        public char getChar​(int index)
        Parameters:
        index - The starting position
        Returns:
        a char from the given index.
      • putChar

        public void putChar​(int index,
                            char c)
        Puts a char at the given index.
        Parameters:
        index - The position
        c - The char to put
      • hashCode

        public int hashCode()
      • length

        public final int length()
        Specified by:
        length in interface IoAbsoluteReader
        Returns:
        the total number of bytes that can be accessed.
      • equals

        public final boolean equals​(Object other)
        A ByteArray is equal to another ByteArray if they start and end at the same index, have the same byte order, and contain the same bytes at each index.
        Specified by:
        equals in interface ByteArray
        Overrides:
        equals in class Object
        Parameters:
        other - The ByteArray we want to compare with
        Returns:
        true if both ByteArray are equals