This class buffers data from an InputStream. The buffered data can be accessed randomly within a predefined window before or after the greatest previously accessed byte index.
When using this class, some bytes before and after the maximum byte previously accessed are available via the get() method inherited from ByteData.
Specifically, 2^(log2OfBufferSegmentLength) bytes, both before and after the maximum byte previously accessed by either the stream's read() or ByteData's get() method are available.
This is useful when reading the FastBlob. Although records are pulled from the FastBlob stream one at a time, the FastBlobDeserializationRecord requires random access to the bytes in the record.
The FastBlobWriter records the ceil(log2(maxLength)) of the individual records contained in the FastBlob. Upon deserialization, this value is read and passed to the constructor of this class to set the buffer length. This guarantees that the reader can access the entire record while it is being read (because the maximum byte accessed while deserializing the record will at most be the last byte of the record).
@author dkoszewnik