Class DirectWriter

java.lang.Object
org.apache.lucene.util.packed.DirectWriter

public final class DirectWriter extends Object
Class for writing packed integers to be directly read from Directory. Integers can be read on-the-fly via DirectReader.

Unlike PackedInts, it optimizes for read i/o operations and supports > 2B values. Example usage:

   int bitsPerValue = DirectWriter.bitsRequired(100); // values up to and including 100
   IndexOutput output = dir.createOutput("packed", IOContext.DEFAULT);
   DirectWriter writer = DirectWriter.getInstance(output, numberOfValues, bitsPerValue);
   for (int i = 0; i < numberOfValues; i++) {
     writer.add(value);
   }
   writer.finish();
   output.close();
 
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    (package private) final int
     
    (package private) long
     
    (package private) boolean
     
    (package private) final byte[]
     
    (package private) final long[]
     
    (package private) final long
     
    (package private) int
     
    (package private) final DataOutput
     
    (package private) static final int[]
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    DirectWriter(DataOutput output, long numValues, int bitsPerValue)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(long l)
    Adds a value to this writer
    static int
    bitsRequired(long maxValue)
    Returns how many bits are required to hold values up to and including maxValue
    private static void
    encode(long[] nextValues, int upTo, byte[] nextBlocks, int bitsPerValue)
     
    void
    finishes writing
    private void
     
    getInstance(DataOutput output, long numValues, int bitsPerValue)
    Returns an instance suitable for encoding numValues using bitsPerValue
    private static int
    roundBits(int bitsRequired)
    Round a number of bits per value to the next amount of bits per value that is supported by this writer.
    static int
    unsignedBitsRequired(long maxValue)
    Returns how many bits are required to hold values up to and including maxValue, interpreted as an unsigned value.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • bitsPerValue

      final int bitsPerValue
    • numValues

      final long numValues
    • output

      final DataOutput output
    • count

      long count
    • finished

      boolean finished
    • off

      int off
    • nextBlocks

      final byte[] nextBlocks
    • nextValues

      final long[] nextValues
    • SUPPORTED_BITS_PER_VALUE

      static final int[] SUPPORTED_BITS_PER_VALUE
  • Constructor Details

    • DirectWriter

      DirectWriter(DataOutput output, long numValues, int bitsPerValue)
  • Method Details

    • add

      public void add(long l) throws IOException
      Adds a value to this writer
      Throws:
      IOException
    • flush

      private void flush() throws IOException
      Throws:
      IOException
    • encode

      private static void encode(long[] nextValues, int upTo, byte[] nextBlocks, int bitsPerValue)
    • finish

      public void finish() throws IOException
      finishes writing
      Throws:
      IOException
    • getInstance

      public static DirectWriter getInstance(DataOutput output, long numValues, int bitsPerValue)
      Returns an instance suitable for encoding numValues using bitsPerValue
    • roundBits

      private static int roundBits(int bitsRequired)
      Round a number of bits per value to the next amount of bits per value that is supported by this writer.
      Parameters:
      bitsRequired - the amount of bits required
      Returns:
      the next number of bits per value that is gte the provided value and supported by this writer
    • bitsRequired

      public static int bitsRequired(long maxValue)
      Returns how many bits are required to hold values up to and including maxValue
      Parameters:
      maxValue - the maximum value that should be representable.
      Returns:
      the amount of bits needed to represent values from 0 to maxValue.
      See Also:
    • unsignedBitsRequired

      public static int unsignedBitsRequired(long maxValue)
      Returns how many bits are required to hold values up to and including maxValue, interpreted as an unsigned value.
      Parameters:
      maxValue - the maximum value that should be representable.
      Returns:
      the amount of bits needed to represent values from 0 to maxValue.
      See Also: