Class RandomAccessData


  • @NotThreadSafe
    public class RandomAccessData
    extends java.lang.Object
    An elastic-sized byte array which allows you to manipulate it as a stream, or access it directly. This allows for a quick succession of moving bytes from an InputStream to this wrapper to be used as an OutputStream and vice versa. This wrapper also provides random access to bytes stored within. This wrapper allows users to finely control the number of byte copies that occur.

    Anything stored within the in-memory buffer from offset size() is considered temporary unused storage.

    • Constructor Summary

      Constructors 
      Constructor Description
      RandomAccessData()
      Constructs a RandomAccessData with a default buffer size.
      RandomAccessData​(byte[] initialBuffer)
      Constructs a RandomAccessData with the initial buffer.
      RandomAccessData​(int initialBufferSize)
      Constructs a RandomAccessData with the given buffer size.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] array()
      Returns the backing array.
      java.io.InputStream asInputStream​(int offset, int length)
      Returns an InputStream wrapper which supplies the portion of this backing byte buffer starting at offset and up to length bytes.
      java.io.OutputStream asOutputStream()
      Returns an output stream which writes to the backing buffer from the current position.
      RandomAccessData copy()
      Returns a copy of this RandomAccessData.
      boolean equals​(@Nullable java.lang.Object other)  
      int hashCode()  
      RandomAccessData increment()
      Returns a RandomAccessData that is the smallest value of same length which is strictly greater than this.
      void readFrom​(java.io.InputStream inStream, int offset, int length)
      Reads length bytes from the specified input stream writing them into the backing data store starting at offset.
      void resetTo​(int position)
      Resets the end of the stream to the specified position.
      int size()
      Returns the number of bytes in the backing array that are valid.
      java.lang.String toString()  
      void writeTo​(java.io.OutputStream out, int offset, int length)
      Writes length bytes starting at offset from the backing data store to the specified output stream.
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • RandomAccessData

        public RandomAccessData()
        Constructs a RandomAccessData with a default buffer size.
      • RandomAccessData

        public RandomAccessData​(byte[] initialBuffer)
        Constructs a RandomAccessData with the initial buffer.
      • RandomAccessData

        public RandomAccessData​(int initialBufferSize)
        Constructs a RandomAccessData with the given buffer size.
    • Method Detail

      • increment

        public RandomAccessData increment()
                                   throws java.io.IOException
        Returns a RandomAccessData that is the smallest value of same length which is strictly greater than this. Note that if this is empty or is all 0xFF then a token value of positive infinity is returned.

        The RandomAccessData.UnsignedLexicographicalComparator supports comparing RandomAccessData with support for positive infinity.

        Throws:
        java.io.IOException
      • array

        public byte[] array()
        Returns the backing array.
      • size

        public int size()
        Returns the number of bytes in the backing array that are valid.
      • resetTo

        public void resetTo​(int position)
        Resets the end of the stream to the specified position.
      • asOutputStream

        public java.io.OutputStream asOutputStream()
        Returns an output stream which writes to the backing buffer from the current position. Note that the internal buffer will grow as required to accommodate all data written.
      • asInputStream

        public java.io.InputStream asInputStream​(int offset,
                                                 int length)
        Returns an InputStream wrapper which supplies the portion of this backing byte buffer starting at offset and up to length bytes. Note that the returned InputStream is only a wrapper and any modifications to the underlying RandomAccessData will be visible by the InputStream.
      • writeTo

        public void writeTo​(java.io.OutputStream out,
                            int offset,
                            int length)
                     throws java.io.IOException
        Writes length bytes starting at offset from the backing data store to the specified output stream.
        Throws:
        java.io.IOException
      • readFrom

        public void readFrom​(java.io.InputStream inStream,
                             int offset,
                             int length)
                      throws java.io.IOException
        Reads length bytes from the specified input stream writing them into the backing data store starting at offset.

        Note that the in memory stream will be grown to ensure there is enough capacity.

        Throws:
        java.io.IOException
      • copy

        public RandomAccessData copy()
                              throws java.io.IOException
        Returns a copy of this RandomAccessData.
        Throws:
        java.io.IOException
      • equals

        public boolean equals​(@Nullable java.lang.Object other)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object