Class MemoryMappedFileWordList

All Implemented Interfaces:
WordList

public class MemoryMappedFileWordList extends AbstractFileWordList
Provides an implementation of a WordList that is backed by a file and leverages a MappedByteBuffer. Each word is read from the file for every get, though the implementation supports a simple memory cache to improve read performance. This implementation does not support files greater than 2GB in size. Use this implementation when the initialization cost of FileWordList is too high.
  • Field Details

    • buffer

      private final Buffer buffer
      Memory-mapped buffer around file.
  • Constructor Details

    • MemoryMappedFileWordList

      public MemoryMappedFileWordList(RandomAccessFile file) throws IOException
      Creates a new case-sensitive word list from the supplied file. The input file is read on initialization and is maintained by this class.

      NOTE Attempts to close the source file will cause IOException when AbstractFileWordList.get(int) is called subsequently.

      Parameters:
      file - File containing words, one per line.
      Throws:
      IOException - if an error occurs reading the supplied file
    • MemoryMappedFileWordList

      public MemoryMappedFileWordList(RandomAccessFile file, boolean caseSensitive) throws IOException
      Creates a new word list from the supplied file. The input file is read on initialization and is maintained by this class.

      NOTE Attempts to close the source file will cause IOException when AbstractFileWordList.get(int) is called subsequently.

      Parameters:
      file - File containing words, one per line.
      caseSensitive - Set to true to create case-sensitive word list, false otherwise.
      Throws:
      IOException - if an error occurs reading the supplied file
    • MemoryMappedFileWordList

      public MemoryMappedFileWordList(RandomAccessFile file, boolean caseSensitive, int cachePercent) throws IOException
      Creates a new word list from the supplied file. The input file is read on initialization and is maintained by this class. cachePercent is a percentage of the file size in bytes.

      NOTE Attempts to close the source file will cause IOException when AbstractFileWordList.get(int) is called subsequently.

      Parameters:
      file - File containing words, one per line.
      caseSensitive - Set to true to create case-sensitive word list, false otherwise.
      cachePercent - Percent (0-100) of file to cache in memory for improved read performance.
      Throws:
      IllegalArgumentException - if cache percent is out of range.
      IOException - if an error occurs reading the supplied file
    • MemoryMappedFileWordList

      public MemoryMappedFileWordList(RandomAccessFile file, boolean caseSensitive, int cachePercent, CharsetDecoder decoder) throws IOException
      Creates a new word list from the supplied file. The input file is read on initialization and is maintained by this class. cachePercent is a percentage of the file size in bytes.

      NOTE Attempts to close the source file will cause IOException when AbstractFileWordList.get(int) is called subsequently.

      Parameters:
      file - File containing words, one per line.
      caseSensitive - Set to true to create case-sensitive word list, false otherwise.
      cachePercent - Percent (0-100) of file to cache in memory for improved read performance.
      decoder - Charset decoder for converting file bytes to characters
      Throws:
      IllegalArgumentException - if cache percent is out of range.
      IOException - if an error occurs reading the supplied file
    • MemoryMappedFileWordList

      public MemoryMappedFileWordList(RandomAccessFile file, boolean caseSensitive, int cachePercent, CharsetDecoder decoder, boolean allocateDirect) throws IOException
      Creates a new word list from the supplied file. The input file is read on initialization and is maintained by this class. cachePercent is a percentage of the file size in bytes.

      NOTE Attempts to close the source file will cause IOException when AbstractFileWordList.get(int) is called subsequently.

      Parameters:
      file - File containing words, one per line.
      caseSensitive - Set to true to create case-sensitive word list, false otherwise.
      cachePercent - Percent (0-100) of file to cache in memory for improved read performance.
      decoder - Charset decoder for converting file bytes to characters
      allocateDirect - whether buffers should be allocated with ByteBuffer.allocateDirect(int)
      Throws:
      IllegalArgumentException - if cache percent is out of range.
      IOException - if an error occurs reading the supplied file
  • Method Details

    • seek

      protected void seek(long offset)
      Description copied from class: AbstractFileWordList
      Positions the read head of the backing file at the given byte offset.
      Specified by:
      seek in class AbstractFileWordList
      Parameters:
      offset - byte offset into file.
    • buffer

      protected ByteBuffer buffer()
      Description copied from class: AbstractFileWordList
      Returns the buffer providing the backing file data.
      Specified by:
      buffer in class AbstractFileWordList
      Returns:
      Buffer around backing file.
    • fill

      protected void fill()
      Description copied from class: AbstractFileWordList
      Fills the buffer from the backing file. This method may be a no-op if the buffer contains all file contents.
      Specified by:
      fill in class AbstractFileWordList