Class DirectWriter


  • public final class DirectWriter
    extends java.lang.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:
    DirectReader
    • Constructor Summary

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

      All Methods Static Methods Instance Methods Concrete Methods 
      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 finish()
      finishes writing
      private void flush()  
      static DirectWriter 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 Detail

      • bitsPerValue

        final int bitsPerValue
      • numValues

        final long numValues
      • 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 Detail

      • DirectWriter

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

      • add

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

        private void flush()
                    throws java.io.IOException
        Throws:
        java.io.IOException
      • encode

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

        public void finish()
                    throws java.io.IOException
        finishes writing
        Throws:
        java.io.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:
        PackedInts.bitsRequired(long)
      • 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:
        PackedInts.unsignedBitsRequired(long)