Class ByteMappedBigList

All Implemented Interfaces:
BigList<Byte>, ByteBigList, ByteCollection, ByteIterable, ByteStack, Size64, Stack<Byte>, Comparable<BigList<? extends Byte>>, Iterable<Byte>, Collection<Byte>

public class ByteMappedBigList extends AbstractByteBigList
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 ByteMappedBigList 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 ByteMappedBigList 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 ByteMappedBigList 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 ByteMappedBigList 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.
    • getByte

      public byte getByte(long index)
      Description copied from interface: ByteBigList
      Returns the element at the specified position.
      See Also:
    • getElements

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