Class RandomAccessBuffer

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Cloneable, RandomAccess, RandomAccessRead, RandomAccessWrite

    public class RandomAccessBuffer
    extends java.lang.Object
    implements RandomAccess, java.lang.Cloneable
    An implementation of the RandomAccess interface to store data in memory. The data will be stored in chunks organized in an ArrayList.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
        RandomAccessBuffer()
      Default constructor.
        RandomAccessBuffer​(byte[] input)
      Create a random access buffer using the given byte array.
      private RandomAccessBuffer​(int definedChunkSize)
      Default constructor.
        RandomAccessBuffer​(java.io.InputStream input)
      Create a random access buffer of the given input stream by copying the data.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int available()
      Returns an estimate of the number of bytes that can be read.
      private void checkClosed()
      Ensure that the RandomAccessBuffer is not closed
      void clear()
      Clears all data of the buffer.
      RandomAccessBuffer clone()  
      void close()
      private void expandBuffer()
      create a new buffer chunk and adjust all pointers and indices.
      long getPosition()
      Returns offset of next byte to be returned by a read method.
      boolean isClosed()
      Returns true if this stream has been closed.
      boolean isEOF()
      A simple test to see if we are at the end of the data.
      long length()
      The total number of bytes that are available.
      private void nextBuffer()
      switch to the next buffer chunk and reset the buffer pointer.
      int peek()
      This will peek at the next byte.
      int read()
      Read a single byte of data.
      int read​(byte[] b)
      Read a buffer of data.
      int read​(byte[] b, int offset, int length)
      Read a buffer of data.
      byte[] readFully​(int length)
      Reads a given number of bytes.
      private int readRemainingBytes​(byte[] b, int offset, int length)  
      void rewind​(int bytes)
      Seek backwards the given number of bytes.
      void seek​(long position)
      Seek to a position in the data.
      void write​(byte[] b)
      Write a buffer of data to the stream.
      void write​(byte[] b, int offset, int length)
      Write a buffer of data to the stream.
      void write​(int b)
      Write a byte to the stream.
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • chunkSize

        private int chunkSize
      • bufferList

        private java.util.List<byte[]> bufferList
      • currentBuffer

        private byte[] currentBuffer
      • pointer

        private long pointer
      • currentBufferPointer

        private int currentBufferPointer
      • size

        private long size
      • bufferListIndex

        private int bufferListIndex
      • bufferListMaxIndex

        private int bufferListMaxIndex
    • Constructor Detail

      • RandomAccessBuffer

        public RandomAccessBuffer()
        Default constructor.
      • RandomAccessBuffer

        private RandomAccessBuffer​(int definedChunkSize)
        Default constructor.
      • RandomAccessBuffer

        public RandomAccessBuffer​(byte[] input)
        Create a random access buffer using the given byte array.
        Parameters:
        input - the byte array to be read
      • RandomAccessBuffer

        public RandomAccessBuffer​(java.io.InputStream input)
                           throws java.io.IOException
        Create a random access buffer of the given input stream by copying the data.
        Parameters:
        input - the input stream to be read
        Throws:
        java.io.IOException - if something went wrong while copying the data
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • clear

        public void clear()
        Clears all data of the buffer.
        Specified by:
        clear in interface RandomAccessWrite
      • seek

        public void seek​(long position)
                  throws java.io.IOException
        Seek to a position in the data.
        Specified by:
        seek in interface RandomAccessRead
        Parameters:
        position - The position to seek to.
        Throws:
        java.io.IOException - If there is an error while seeking.
      • getPosition

        public long getPosition()
                         throws java.io.IOException
        Returns offset of next byte to be returned by a read method.
        Specified by:
        getPosition in interface RandomAccessRead
        Returns:
        offset of next byte which will be returned with next RandomAccessRead.read() (if no more bytes are left it returns a value >= length of source)
        Throws:
        java.io.IOException
      • read

        public int read()
                 throws java.io.IOException
        Read a single byte of data.
        Specified by:
        read in interface RandomAccessRead
        Returns:
        The byte of data that is being read.
        Throws:
        java.io.IOException - If there is an error while reading the data.
      • read

        public int read​(byte[] b,
                        int offset,
                        int length)
                 throws java.io.IOException
        Read a buffer of data.
        Specified by:
        read in interface RandomAccessRead
        Parameters:
        b - The buffer to write the data to.
        offset - Offset into the buffer to start writing.
        length - The amount of data to attempt to read.
        Returns:
        The number of bytes that were actually read.
        Throws:
        java.io.IOException - If there was an error while reading the data.
      • readRemainingBytes

        private int readRemainingBytes​(byte[] b,
                                       int offset,
                                       int length)
      • length

        public long length()
                    throws java.io.IOException
        The total number of bytes that are available.
        Specified by:
        length in interface RandomAccessRead
        Returns:
        The number of bytes available.
        Throws:
        java.io.IOException - If there is an IO error while determining the length of the data stream.
      • write

        public void write​(int b)
                   throws java.io.IOException
        Write a byte to the stream.
        Specified by:
        write in interface RandomAccessWrite
        Parameters:
        b - The byte to write.
        Throws:
        java.io.IOException - If there is an IO error while writing.
      • write

        public void write​(byte[] b)
                   throws java.io.IOException
        Write a buffer of data to the stream.
        Specified by:
        write in interface RandomAccessWrite
        Parameters:
        b - The buffer to get the data from.
        Throws:
        java.io.IOException - If there is an error while writing the data.
      • write

        public void write​(byte[] b,
                          int offset,
                          int length)
                   throws java.io.IOException
        Write a buffer of data to the stream.
        Specified by:
        write in interface RandomAccessWrite
        Parameters:
        b - The buffer to get the data from.
        offset - An offset into the buffer to get the data from.
        length - The length of data to write.
        Throws:
        java.io.IOException - If there is an error while writing the data.
      • expandBuffer

        private void expandBuffer()
                           throws java.io.IOException
        create a new buffer chunk and adjust all pointers and indices.
        Throws:
        java.io.IOException
      • nextBuffer

        private void nextBuffer()
                         throws java.io.IOException
        switch to the next buffer chunk and reset the buffer pointer.
        Throws:
        java.io.IOException
      • checkClosed

        private void checkClosed()
                          throws java.io.IOException
        Ensure that the RandomAccessBuffer is not closed
        Throws:
        java.io.IOException
      • isClosed

        public boolean isClosed()
        Returns true if this stream has been closed.
        Specified by:
        isClosed in interface RandomAccessRead
      • isEOF

        public boolean isEOF()
                      throws java.io.IOException
        A simple test to see if we are at the end of the data.
        Specified by:
        isEOF in interface RandomAccessRead
        Returns:
        true if we are at the end of the data.
        Throws:
        java.io.IOException - If there is an error reading the next byte.
      • available

        public int available()
                      throws java.io.IOException
        Returns an estimate of the number of bytes that can be read.
        Specified by:
        available in interface RandomAccessRead
        Returns:
        the number of bytes that can be read
        Throws:
        java.io.IOException - if this random access has been closed
      • peek

        public int peek()
                 throws java.io.IOException
        This will peek at the next byte.
        Specified by:
        peek in interface RandomAccessRead
        Returns:
        The next byte on the stream, leaving it as available to read.
        Throws:
        java.io.IOException - If there is an error reading the next byte.
      • rewind

        public void rewind​(int bytes)
                    throws java.io.IOException
        Seek backwards the given number of bytes.
        Specified by:
        rewind in interface RandomAccessRead
        Parameters:
        bytes - the number of bytes to be seeked backwards
        Throws:
        java.io.IOException - If there is an error while seeking
      • readFully

        public byte[] readFully​(int length)
                         throws java.io.IOException
        Reads a given number of bytes.
        Specified by:
        readFully in interface RandomAccessRead
        Parameters:
        length - the number of bytes to be read
        Returns:
        a byte array containing the bytes just read
        Throws:
        java.io.IOException - if an I/O error occurs while reading data
      • read

        public int read​(byte[] b)
                 throws java.io.IOException
        Read a buffer of data.
        Specified by:
        read in interface RandomAccessRead
        Parameters:
        b - The buffer to write the data to.
        Returns:
        The number of bytes that were actually read.
        Throws:
        java.io.IOException - If there was an error while reading the data.