Class RandomAccessData

java.lang.Object
org.apache.beam.runners.dataflow.util.RandomAccessData

@NotThreadSafe public class RandomAccessData extends 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.

  • Field Details

  • Constructor Details

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

    • increment

      public RandomAccessData increment() throws 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:
      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 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 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(OutputStream out, int offset, int length) throws IOException
      Writes length bytes starting at offset from the backing data store to the specified output stream.
      Throws:
      IOException
    • readFrom

      public void readFrom(InputStream inStream, int offset, int length) throws 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:
      IOException
    • copy

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

      public boolean equals(@Nullable Object other)
      Overrides:
      equals in class Object
    • hashCode

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

      public String toString()
      Overrides:
      toString in class Object