Class FastMultiByteArrayInputStream

java.lang.Object
java.io.InputStream
it.unimi.dsi.fastutil.io.MeasurableInputStream
it.unimi.dsi.fastutil.io.FastMultiByteArrayInputStream
All Implemented Interfaces:
MeasurableStream, RepositionableStream, Closeable, AutoCloseable

public class FastMultiByteArrayInputStream extends MeasurableInputStream implements RepositionableStream
Simple, fast and repositionable byte array input stream that multiplexes its content among several arrays. This class is significantly slower than FastByteArrayInputStream, but it can hold 256 PiB of data. The relevant constructor is FastMultiByteArrayInputStream(InputStream, long), which fetches a stream and loads it into a sequence of byte arrays.
Author:
Sebastiano Vigna, Paolo Boldi s
  • Field Details

    • SLICE_BITS

      public static final int SLICE_BITS
      The number of bits of an array slice index.
      See Also:
    • SLICE_SIZE

      public static final int SLICE_SIZE
      The maximum length of an array slice.
      See Also:
    • SLICE_MASK

      public static final int SLICE_MASK
      The mask to retrieve a slice offset.
      See Also:
    • array

      public byte[][] array
      The array of arrays backing the input stream, plus an additional null entry.
    • current

      public byte[] current
      The current array.
    • length

      public long length
      The number of valid bytes in array.
  • Constructor Details

    • FastMultiByteArrayInputStream

      public FastMultiByteArrayInputStream(MeasurableInputStream is) throws IOException
      Creates a new multi-array input stream loading it from a measurable input stream.
      Parameters:
      is - the input stream that will fill the array.
      Throws:
      IOException
    • FastMultiByteArrayInputStream

      public FastMultiByteArrayInputStream(InputStream is, long size) throws IOException
      Creates a new multi-array input stream loading it from an input stream.
      Parameters:
      is - the input stream that will fill the array.
      size - the number of bytes to be read from is.
      Throws:
      IOException
    • FastMultiByteArrayInputStream

      public FastMultiByteArrayInputStream(FastMultiByteArrayInputStream is)
      Creates a new multi-array input stream sharing the backing arrays of another multi-array input stream.
      Parameters:
      is - the multi-array input stream to replicate.
    • FastMultiByteArrayInputStream

      public FastMultiByteArrayInputStream(byte[] array)
      Creates a new multi-array input stream using a given array.
      Parameters:
      array - the backing array.
  • Method Details

    • available

      public int available()
      Returns the number of bytes that can be read (or skipped over) from this input stream without blocking.

      Note that this number may be smaller than the number of bytes actually available from the stream if this number exceeds Integer.MAX_VALUE.

      Overrides:
      available in class InputStream
      Returns:
      the minimum among the number of available bytes and Integer.MAX_VALUE.
    • skip

      public long skip(long n)
      Overrides:
      skip in class InputStream
    • read

      public int read()
      Specified by:
      read in class InputStream
    • read

      public int read(byte[] b, int offset, int length)
      Overrides:
      read in class InputStream
    • position

      public long position()
      Description copied from interface: RepositionableStream
      Returns the current stream position.
      Specified by:
      position in interface MeasurableStream
      Specified by:
      position in interface RepositionableStream
      Returns:
      the current stream position.
    • position

      public void position(long newPosition)
      Description copied from interface: RepositionableStream
      Sets the current stream position.
      Specified by:
      position in interface RepositionableStream
      Parameters:
      newPosition - the new stream position.
    • length

      public long length() throws IOException
      Description copied from interface: MeasurableStream
      Returns the overall length of this stream (optional operation). In most cases, this will require the stream to perform some extra action, possibly changing the state of the input stream itself (typically, reading all the bytes up to the end, or flushing on output stream). Implementing classes should always document what state will the input stream be in after calling this method, and which kind of exception could be thrown.
      Specified by:
      length in interface MeasurableStream
      Throws:
      IOException
    • close

      public void close()
      NOP.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class InputStream
    • markSupported

      public boolean markSupported()
      Overrides:
      markSupported in class InputStream
    • mark

      public void mark(int dummy)
      Overrides:
      mark in class InputStream
    • reset

      public void reset()
      Overrides:
      reset in class InputStream