Class ByteBufferInputStream

All Implemented Interfaces:
MeasurableStream, RepositionableStream, Closeable, AutoCloseable

public class ByteBufferInputStream extends MeasurableInputStream implements RepositionableStream
A bridge between byte buffers and input streams.

Java's memory-mapping facilities have the severe limitation of mapping at most Integer.MAX_VALUE bytes, as they expose the content of a file using a MappedByteBuffer. This class can expose a file of arbitrary length as a repositionable MeasurableInputStream that is actually based on an array of MappedByteBuffers, each mapping a chunk of CHUNK_SIZE bytes.

Sebastiano Vigna
  • Field Details

  • Constructor Details

    • ByteBufferInputStream

      public ByteBufferInputStream(ByteBuffer byteBuffer)
      Creates a new byte-buffer input stream from a single ByteBuffer.
      byteBuffer - the underlying byte buffer.
    • ByteBufferInputStream

      protected ByteBufferInputStream(ByteBuffer[] byteBuffer, long size, int curr, boolean[] readyToUse)
      Creates a new byte-buffer input stream.
      byteBuffer - the underlying byte buffers.
      size - the sum of the capacities of the byte buffers.
      curr - the current buffer (reading will start at this buffer from its current position).
      readyToUse - an array parallel to byteBuffer specifying which buffers do not need to be duplicated before being used (the process will happen lazily); the array will be used internally by the newly created byte-buffer input stream.
  • Method Details