Class DoubleMappedBigList

All Implemented Interfaces:
BigList<Double>, DoubleBigList, DoubleCollection, DoubleIterable, DoubleStack, Size64, Stack<Double>, Comparable<BigList<? extends Double>>, Iterable<Double>, Collection<Double>

public class DoubleMappedBigList extends AbstractDoubleBigList
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 DoubleMappedBigList 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 DoubleMappedBigList 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 DoubleMappedBigList 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 DoubleMappedBigList 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.
    • getDouble

      public double getDouble(long index)
      Description copied from interface: DoubleBigList
      Returns the element at the specified position.
      See Also:
    • getElements

      public void getElements(long from, double[] a, int offset, int length)
      Description copied from interface: DoubleBigList
      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 double set(long index, double value)
      Description copied from class: AbstractDoubleBigList
      Replaces the element at the specified position in this big list with the specified element (optional operation).
      Specified by:
      set in interface DoubleBigList
      Overrides:
      set in class AbstractDoubleBigList
      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.