Class CompositeByteArray

java.lang.Object
org.apache.mina.util.byteaccess.AbstractByteArray
org.apache.mina.util.byteaccess.CompositeByteArray
All Implemented Interfaces:
ByteArray, IoAbsoluteReader, IoAbsoluteWriter

public final class CompositeByteArray extends AbstractByteArray
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.
  • Field Details

    • bas

      private final ByteArrayList bas
      Stores the underlying ByteArrays.
    • order

      private ByteOrder order
      The byte order for data in the buffer
    • byteArrayFactory

      private final ByteArrayFactory byteArrayFactory
      May be used in getSingleIoBuffer. Optional.
  • Constructor Details

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

    • getFirst

      public ByteArray getFirst()
      Returns:
      the first ByteArray in the list
    • 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

      Get a cursor starting at index 0 (which may not be the start of the array) and with the given listener.
      Parameters:
      listener - The listener to use
      Returns:
      a new ByteArray.Cursor instance
    • 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.
    • addHook

      private void addHook(ByteArray ba)
      This method should be called prior to adding any component ByteArray to a composite.
      Parameters:
      ba - The component to add.
    • 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()
      Specified by:
      hashCode in class AbstractByteArray