Class BufferedIndexInput

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  BufferedIndexInput.SlicedIndexInput
      Implementation of an IndexInput that reads from a portion of a file.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      static int bufferSize​(IOContext context)
      Returns default buffer sizes for the given IOContext
      private void checkBufferSize​(int bufferSize)  
      BufferedIndexInput clone()
      Returns a clone of this stream.
      int getBufferSize()
      Returns buffer size
      long getFilePointer()
      Returns the current position in this file, where the next read will occur.
      byte readByte()
      Reads and returns a single byte.
      byte readByte​(long pos)
      Reads a byte at the given position in the file
      void readBytes​(byte[] b, int offset, int len)
      Reads a specified number of bytes into an array at the specified offset.
      void readBytes​(byte[] b, int offset, int len, boolean useBuffer)
      Reads a specified number of bytes into an array at the specified offset with control over whether the read should be buffered (callers who have their own buffer should pass in "false" for useBuffer).
      void readFloats​(float[] dst, int offset, int len)
      Reads a specified number of floats into an array at the specified offset.
      protected void readGroupVInt​(long[] dst, int offset)
      Override if you have a efficient implementation.
      int readInt()
      Reads four bytes and returns an int (LE byte order).
      int readInt​(long pos)
      Reads an integer (LE byte order) at the given position in the file
      protected abstract void readInternal​(java.nio.ByteBuffer b)
      Expert: implements buffer refill.
      void readInts​(int[] dst, int offset, int len)
      Reads a specified number of ints into an array at the specified offset.
      long readLong()
      Reads eight bytes and returns a long (LE byte order).
      long readLong​(long pos)
      Reads a long (LE byte order) at the given position in the file
      void readLongs​(long[] dst, int offset, int len)
      Read a specified number of longs.
      short readShort()
      Reads two bytes and returns a short (LE byte order).
      short readShort​(long pos)
      Reads a short (LE byte order) at the given position in the file
      int readVInt()
      Reads an int stored in variable-length format.
      long readVLong()
      Reads a long stored in variable-length format.
      private void refill()  
      private long resolvePositionInBuffer​(long pos, int width)  
      void seek​(long pos)
      Sets current position in this file, where the next read will occur.
      protected abstract void seekInternal​(long pos)
      Expert: implements seek.
      IndexInput slice​(java.lang.String sliceDescription, long offset, long length)
      Creates a slice of this index input, with the given description, offset, and length.
      static BufferedIndexInput wrap​(java.lang.String sliceDescription, IndexInput other, long offset, long length)
      Wraps a portion of another IndexInput with buffering.
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • EMPTY_BYTEBUFFER

        private static final java.nio.ByteBuffer EMPTY_BYTEBUFFER
      • BUFFER_SIZE

        public static final int BUFFER_SIZE
        Default buffer size set to 1024.
        See Also:
        Constant Field Values
      • MIN_BUFFER_SIZE

        public static final int MIN_BUFFER_SIZE
        Minimum buffer size allowed
        See Also:
        Constant Field Values
      • MERGE_BUFFER_SIZE

        public static final int MERGE_BUFFER_SIZE
        A buffer size for merges set to 4096.
        See Also:
        Constant Field Values
      • bufferSize

        private final int bufferSize
      • buffer

        private java.nio.ByteBuffer buffer
      • bufferStart

        private long bufferStart
    • Constructor Detail

      • BufferedIndexInput

        public BufferedIndexInput​(java.lang.String resourceDesc)
      • BufferedIndexInput

        public BufferedIndexInput​(java.lang.String resourceDesc,
                                  IOContext context)
      • BufferedIndexInput

        public BufferedIndexInput​(java.lang.String resourceDesc,
                                  int bufferSize)
        Inits BufferedIndexInput with a specific bufferSize
    • Method Detail

      • getBufferSize

        public final int getBufferSize()
        Returns buffer size
      • checkBufferSize

        private void checkBufferSize​(int bufferSize)
      • readBytes

        public final void readBytes​(byte[] b,
                                    int offset,
                                    int len)
                             throws java.io.IOException
        Description copied from class: DataInput
        Reads a specified number of bytes into an array at the specified offset.
        Specified by:
        readBytes in class DataInput
        Parameters:
        b - the array to read bytes into
        offset - the offset in the array to start storing bytes
        len - the number of bytes to read
        Throws:
        java.io.IOException
        See Also:
        DataOutput.writeBytes(byte[],int)
      • readBytes

        public final void readBytes​(byte[] b,
                                    int offset,
                                    int len,
                                    boolean useBuffer)
                             throws java.io.IOException
        Description copied from class: DataInput
        Reads a specified number of bytes into an array at the specified offset with control over whether the read should be buffered (callers who have their own buffer should pass in "false" for useBuffer). Currently only BufferedIndexInput respects this parameter.
        Overrides:
        readBytes in class DataInput
        Parameters:
        b - the array to read bytes into
        offset - the offset in the array to start storing bytes
        len - the number of bytes to read
        useBuffer - set to false if the caller will handle buffering.
        Throws:
        java.io.IOException
        See Also:
        DataOutput.writeBytes(byte[],int)
      • readGroupVInt

        protected void readGroupVInt​(long[] dst,
                                     int offset)
                              throws java.io.IOException
        Description copied from class: DataInput
        Override if you have a efficient implementation. In general this is when the input supports random access.
        Overrides:
        readGroupVInt in class DataInput
        Throws:
        java.io.IOException
      • readVInt

        public final int readVInt()
                           throws java.io.IOException
        Description copied from class: DataInput
        Reads an int stored in variable-length format. Reads between one and five bytes. Smaller values take fewer bytes. Negative numbers are supported, but should be avoided.

        The format is described further in DataOutput.writeVInt(int).

        Overrides:
        readVInt in class DataInput
        Throws:
        java.io.IOException
        See Also:
        DataOutput.writeVInt(int)
      • readVLong

        public final long readVLong()
                             throws java.io.IOException
        Description copied from class: DataInput
        Reads a long stored in variable-length format. Reads between one and nine bytes. Smaller values take fewer bytes. Negative numbers are not supported.

        The format is described further in DataOutput.writeVInt(int).

        Overrides:
        readVLong in class DataInput
        Throws:
        java.io.IOException
        See Also:
        DataOutput.writeVLong(long)
      • readFloats

        public void readFloats​(float[] dst,
                               int offset,
                               int len)
                        throws java.io.IOException
        Description copied from class: DataInput
        Reads a specified number of floats into an array at the specified offset.
        Overrides:
        readFloats in class DataInput
        Parameters:
        dst - the array to read bytes into
        offset - the offset in the array to start storing floats
        len - the number of floats to read
        Throws:
        java.io.IOException
      • readLongs

        public void readLongs​(long[] dst,
                              int offset,
                              int len)
                       throws java.io.IOException
        Description copied from class: DataInput
        Read a specified number of longs.
        Overrides:
        readLongs in class DataInput
        Throws:
        java.io.IOException
      • readInts

        public void readInts​(int[] dst,
                             int offset,
                             int len)
                      throws java.io.IOException
        Description copied from class: DataInput
        Reads a specified number of ints into an array at the specified offset.
        Overrides:
        readInts in class DataInput
        Parameters:
        dst - the array to read bytes into
        offset - the offset in the array to start storing ints
        len - the number of ints to read
        Throws:
        java.io.IOException
      • resolvePositionInBuffer

        private long resolvePositionInBuffer​(long pos,
                                             int width)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • refill

        private void refill()
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readInternal

        protected abstract void readInternal​(java.nio.ByteBuffer b)
                                      throws java.io.IOException
        Expert: implements buffer refill. Reads bytes from the current position in the input.
        Parameters:
        b - the buffer to read bytes into
        Throws:
        java.io.IOException
      • seek

        public final void seek​(long pos)
                        throws java.io.IOException
        Description copied from class: IndexInput
        Sets current position in this file, where the next read will occur. If this is beyond the end of the file then this will throw EOFException and then the stream is in an undetermined state.
        Specified by:
        seek in class IndexInput
        Throws:
        java.io.IOException
        See Also:
        IndexInput.getFilePointer()
      • seekInternal

        protected abstract void seekInternal​(long pos)
                                      throws java.io.IOException
        Expert: implements seek. Sets current position in this file, where the next readInternal(ByteBuffer) will occur.
        Throws:
        java.io.IOException
        See Also:
        readInternal(ByteBuffer)
      • clone

        public BufferedIndexInput clone()
        Description copied from class: IndexInput
        Returns a clone of this stream.

        Clones of a stream access the same data, and are positioned at the same point as the stream they were cloned from.

        Expert: Subclasses must ensure that clones may be positioned at different points in the input from each other and from the stream they were cloned from.

        Warning: Lucene never closes cloned IndexInputs, it will only call IndexInput.close() on the original object.

        If you access the cloned IndexInput after closing the original object, any readXXX methods will throw AlreadyClosedException.

        This method is NOT thread safe, so if the current IndexInput is being used by one thread while clone is called by another, disaster could strike.

        Overrides:
        clone in class IndexInput
      • slice

        public IndexInput slice​(java.lang.String sliceDescription,
                                long offset,
                                long length)
                         throws java.io.IOException
        Description copied from class: IndexInput
        Creates a slice of this index input, with the given description, offset, and length. The slice is sought to the beginning.
        Specified by:
        slice in class IndexInput
        Throws:
        java.io.IOException
      • bufferSize

        public static int bufferSize​(IOContext context)
        Returns default buffer sizes for the given IOContext
      • wrap

        public static BufferedIndexInput wrap​(java.lang.String sliceDescription,
                                              IndexInput other,
                                              long offset,
                                              long length)
        Wraps a portion of another IndexInput with buffering.

        Please note: This is in most cases ineffective, because it may double buffer!