Class AbstractFileWordList

java.lang.Object
org.passay.dictionary.AbstractWordList
org.passay.dictionary.AbstractFileWordList
All Implemented Interfaces:
WordList
Direct Known Subclasses:
FileWordList, MemoryMappedFileWordList

public abstract class AbstractFileWordList extends AbstractWordList
Common implementation for file based word lists.
  • Field Details

    • DEFAULT_CACHE_PERCENT

      protected static final int DEFAULT_CACHE_PERCENT
      Default cache percent.
      See Also:
    • file

      protected final RandomAccessFile file
      File containing words.
    • size

      protected int size
      Number of words in the file.
    • lock

      private final Object lock
      Used to synchronize access to the underlying cache.
    • cache

      Cache of indexes to file positions.
    • charsetDecoder

      private final CharsetDecoder charsetDecoder
      Charset decoder.
    • wordBuf

      private final ByteBuffer wordBuf
      Buffer to hold word read from file.
    • charBuf

      private final CharBuffer charBuf
      Buffer to hold decoded word read from file.
    • position

      private long position
      Current position into backing file.
  • Constructor Details

    • AbstractFileWordList

      public AbstractFileWordList(RandomAccessFile file, boolean caseSensitive, CharsetDecoder decoder)
      Creates a new abstract file word list from the supplied file.
      Parameters:
      file - File containing words, one per line.
      caseSensitive - Set to true to create case-sensitive word list, false otherwise.
      decoder - Charset decoder for converting file bytes to characters
  • Method Details

    • get

      public String get(int index)
      Description copied from interface: WordList
      Returns the word at the given 0-based index.
      Parameters:
      index - 0-based index.
      Returns:
      word at given index.
    • size

      public int size()
      Description copied from interface: WordList
      Returns the number of words in the list.
      Returns:
      total number of words in list.
    • getFile

      public RandomAccessFile getFile()
      Returns the file backing this list.
      Returns:
      random access file that is backing this list
    • close

      public void close() throws IOException
      Closes the underlying file and make the cache available for garbage collection.
      Throws:
      IOException - if an error occurs closing the file
    • initialize

      protected void initialize(int cachePercent, boolean allocateDirect) throws IOException
      Reads words from the backing file to initialize the word list.
      Parameters:
      cachePercent - Percent of file in bytes to use for cache.
      allocateDirect - whether buffers should be allocated with ByteBuffer.allocateDirect(int)
      Throws:
      IllegalArgumentException - if cachePercent is out of range or the words are not sorted correctly according to the comparator
      IOException - on I/O errors reading file data.
    • readWord

      protected String readWord(int index) throws IOException
      Reads the word from the file at the given index of the word list.
      Parameters:
      index - ith word in the word list
      Returns:
      word at the supplied index
      Throws:
      IOException - on I/O errors
    • seek

      protected abstract void seek(long offset) throws IOException
      Positions the read head of the backing file at the given byte offset.
      Parameters:
      offset - byte offset into file.
      Throws:
      IOException - on I/O errors seeking.
    • buffer

      protected abstract ByteBuffer buffer()
      Returns the buffer providing the backing file data.
      Returns:
      Buffer around backing file.
    • fill

      protected abstract void fill() throws IOException
      Fills the buffer from the backing file. This method may be a no-op if the buffer contains all file contents.
      Throws:
      IOException - on I/O errors filling buffer.
    • readNextWord

      private AbstractFileWordList.FileWord readNextWord() throws IOException
      Reads the next word from the current position in the backing file.
      Returns:
      Data structure containing word and byte offset into file where word begins.
      Throws:
      IOException - on I/O errors reading file data.
    • hasRemaining

      private boolean hasRemaining() throws IOException
      Determines whether the backing buffer has any more data to read. If the buffer is empty, it attempts to read from the underlying file and then checks the buffer again.
      Returns:
      True if there is any more data to read from the buffer, false otherwise.
      Throws:
      IOException - on I/O errors reading file data.
    • toString

      public String toString()
      Overrides:
      toString in class Object