Class IntMappedBigList

All Implemented Interfaces:
BigList<Integer>, IntBigList, IntCollection, IntIterable, IntStack, Size64, Stack<Integer>, Comparable<BigList<? extends Integer>>, Iterable<Integer>, Collection<Integer>

public class IntMappedBigList extends AbstractIntBigList
A bridge between byte buffers and type-specific big lists.

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 primitive types of arbitrary length as a BigList that is actually based on an array of MappedByteBuffers, each mapping a chunk of CHUNK_SIZE longs.

Mapping can happen with a specified byte order: saving and mapping data in native order using methods from BinIO will enhance performance significantly.

Instances of this class are not thread safe, but the copy() method provides a lightweight duplicate that can be read independently by another thread. Only chunks that are actually used will be duplicated lazily. If you are modifiying the content of list, however, you will need to provide external synchronization.

Author:
Sebastiano Vigna
  • Field Details

  • Method Details

    • map

      public static IntMappedBigList map(FileChannel fileChannel) throws IOException
      Creates a new mapped big list by read-only mapping a given file channel using the standard Java (i.e., DataOutput) byte order (ByteOrder.BIG_ENDIAN).
      Parameters:
      fileChannel - the file channel that will be mapped.
      Returns:
      a new read-only mapped big list over the contents of fileChannel.
      Throws:
      IOException
      See Also:
    • map

      public static IntMappedBigList map(FileChannel fileChannel, ByteOrder byteOrder) throws IOException
      Creates a new mapped big list by read-only mapping a given file channel.
      Parameters:
      fileChannel - the file channel that will be mapped.
      byteOrder - a prescribed byte order.
      Returns:
      a new read-only mapped big list over the contents of fileChannel.
      Throws:
      IOException
      See Also:
    • map

      public static IntMappedBigList map(FileChannel fileChannel, ByteOrder byteOrder, FileChannel.MapMode mapMode) throws IOException
      Creates a new mapped big list by mapping a given file channel.
      Parameters:
      fileChannel - the file channel that will be mapped.
      byteOrder - a prescribed byte order.
      mapMode - the mapping mode: usually FileChannel.MapMode.READ_ONLY, but if intend to make the list mutable, you have to pass FileChannel.MapMode.READ_WRITE.
      Returns:
      a new mapped big list over the contents of fileChannel.
      Throws:
      IOException
    • copy

      public IntMappedBigList copy()
      Returns a lightweight duplicate that can be read independently by another thread.

      Only chunks that are actually used will be duplicated lazily.

      Returns:
      a lightweight duplicate that can be read independently by another thread.
    • getInt

      public int getInt(long index)
      Description copied from interface: IntBigList
      Returns the element at the specified position.
      See Also:
    • getElements

      public void getElements(long from, int[] a, int offset, int length)
      Description copied from interface: IntBigList
      Copies (hopefully quickly) elements of this type-specific big list into the given array.
      Parameters:
      from - the start index (inclusive).
      a - the destination array.
      offset - the offset into the destination array where to store the first element copied.
      length - the number of elements to be copied.
    • set

      public int set(long index, int value)
      Description copied from class: AbstractIntBigList
      Replaces the element at the specified position in this big list with the specified element (optional operation).
      Specified by:
      set in interface IntBigList
      Overrides:
      set in class AbstractIntBigList
      See Also:
    • size64

      public long size64()
      Description copied from interface: Size64
      Returns the size of this data structure as a long.
      Returns:
      the size of this data structure.