Package org.apache.lucene.store

## Class ByteBufferIndexInput

- java.lang.Object
- - org.apache.lucene.store.DataInput
  - - org.apache.lucene.store.IndexInput
    - - org.apache.lucene.store.ByteBufferIndexInput

- All Implemented Interfaces:
    `Closeable`, `AutoCloseable`, `Cloneable`, `RandomAccessInput`

      public abstract class ByteBufferIndexInput
      extends IndexInput
      implements RandomAccessInput

  Base IndexInput implementation that uses an array of ByteBuffers to represent a file.

  Because Java's ByteBuffer uses an int to address the values, it's necessary to access a file greater Integer.MAX_VALUE in size using multiple byte buffers.

  For efficiency, this class requires that the buffers are a power-of-two (`chunkSizePower` ).

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected ByteBuffer[]` | `buffers` |
    `protected long` | `chunkSizeMask` |
    `protected int` | `chunkSizePower` |
    `protected ByteBuffer` | `curBuf` |
    `protected int` | `curBufIndex` |
    `protected org.apache.lucene.store.ByteBufferGuard` | `guard` |
    `protected boolean` | `isClone` |
    `protected long` | `length` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected ByteBufferIndexInput` | `buildSlice​(String sliceDescription, long offset, long length)` | Builds the actual sliced IndexInput (may apply extra offset in subclasses).
    `ByteBufferIndexInput` | `clone()` | Returns a clone of this stream.
    `void` | `close()` | Closes the stream to further operations.
    `long` | `getFilePointer()` | Returns the current position in this file, where the next read will occur.
    `long` | `length()` | The number of bytes in the file.
    `protected ByteBufferIndexInput` | `newCloneInstance​(String newResourceDescription, ByteBuffer[] newBuffers, int offset, long length)` | Factory method that creates a suitable implementation of this class for the given ByteBuffers.
    `static ByteBufferIndexInput` | `newInstance​(String resourceDescription, ByteBuffer[] buffers, long length, int chunkSizePower, org.apache.lucene.store.ByteBufferGuard guard)` |
    `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` | `readFloats​(float[] floats, int offset, int len)` | Reads a specified number of floats into an array at the specified offset.
    `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
    `void` | `readInts​(int[] dst, int offset, int length)` | 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 length)` | 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.
    `void` | `seek​(long pos)` | Sets current position in this file, where the next read will occur.
    `protected void` | `setCurBuf​(ByteBuffer curBuf)` |
    `ByteBufferIndexInput` | `slice​(String sliceDescription, long offset, long length)` | Creates a slice of this index input, with the given description, offset, and length.

    - ### Methods inherited from class org.apache.lucene.store.IndexInput

      `getFullSliceDescription, randomAccessSlice, skipBytes, toString`

    - ### Methods inherited from class org.apache.lucene.store.DataInput

      `readBytes, readGroupVInt, readGroupVInts, readMapOfStrings, readSetOfStrings, readString, readZInt, readZLong`

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### length

          protected final long length

    - #### chunkSizeMask

          protected final long chunkSizeMask

    - #### chunkSizePower

          protected final int chunkSizePower

    - #### guard

          protected final org.apache.lucene.store.ByteBufferGuard guard

    - #### buffers

          protected ByteBuffer[] buffers

    - #### curBufIndex

          protected int curBufIndex

    - #### curBuf

          protected ByteBuffer curBuf

    - #### isClone

          protected boolean isClone

  - ### Method Detail

    - #### newInstance

          public static ByteBufferIndexInput newInstance​(String resourceDescription,
                                                         ByteBuffer[] buffers,
                                                         long length,
                                                         int chunkSizePower,
                                                         org.apache.lucene.store.ByteBufferGuard guard)

    - #### setCurBuf

          protected void setCurBuf​(ByteBuffer curBuf)

    - #### readByte

          public final byte readByte()
                              throws IOException

      Description copied from class: `DataInput`
      Reads and returns a single byte.
      Specified by:
        `readByte` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `DataOutput.writeByte(byte)`

    - #### readBytes

          public final void readBytes​(byte[] b,
                                      int offset,
                                      int len)
                               throws 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:
        `IOException`
      See Also:
        `DataOutput.writeBytes(byte[],int)`

    - #### readLongs

          public final void readLongs​(long[] dst,
                                      int offset,
                                      int length)
                               throws IOException

      Description copied from class: `DataInput`
      Read a specified number of longs.
      Overrides:
        `readLongs` in class `DataInput`
      Throws:
        `IOException`

    - #### readInts

          public void readInts​(int[] dst,
                               int offset,
                               int length)
                        throws 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
        `length` - the number of ints to read
      Throws:
        `IOException`

    - #### readFloats

          public final void readFloats​(float[] floats,
                                       int offset,
                                       int len)
                                throws 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:
        `floats` - the array to read bytes into
        `offset` - the offset in the array to start storing floats
        `len` - the number of floats to read
      Throws:
        `IOException`

    - #### readShort

          public final short readShort()
                                throws IOException

      Description copied from class: `DataInput`
      Reads two bytes and returns a short (LE byte order).
      Overrides:
        `readShort` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `DataOutput.writeShort(short)`, `BitUtil.VH_LE_SHORT`

    - #### readInt

          public final int readInt()
                            throws IOException

      Description copied from class: `DataInput`
      Reads four bytes and returns an int (LE byte order).
      Overrides:
        `readInt` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `DataOutput.writeInt(int)`, `BitUtil.VH_LE_INT`

    - #### readVInt

          public final int readVInt()
                             throws 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:
        `IOException`
      See Also:
        `DataOutput.writeVInt(int)`

    - #### readVLong

          public final long readVLong()
                               throws 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:
        `IOException`
      See Also:
        `DataOutput.writeVLong(long)`

    - #### readLong

          public final long readLong()
                              throws IOException

      Description copied from class: `DataInput`
      Reads eight bytes and returns a long (LE byte order).
      Overrides:
        `readLong` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `DataOutput.writeLong(long)`, `BitUtil.VH_LE_LONG`

    - #### getFilePointer

          public long getFilePointer()

      Description copied from class: `IndexInput`
      Returns the current position in this file, where the next read will occur.
      Specified by:
        `getFilePointer` in class `IndexInput`
      See Also:
        `IndexInput.seek(long)`

    - #### seek

          public void seek​(long pos)
                    throws 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:
        `IOException`
      See Also:
        `IndexInput.getFilePointer()`

    - #### readByte

          public byte readByte​(long pos)
                        throws IOException

      Description copied from interface: `RandomAccessInput`
      Reads a byte at the given position in the file
      Specified by:
        `readByte` in interface `RandomAccessInput`
      Throws:
        `IOException`
      See Also:
        `DataInput.readByte()`

    - #### readShort

          public short readShort​(long pos)
                          throws IOException

      Description copied from interface: `RandomAccessInput`
      Reads a short (LE byte order) at the given position in the file
      Specified by:
        `readShort` in interface `RandomAccessInput`
      Throws:
        `IOException`
      See Also:
        `DataInput.readShort()`, `BitUtil.VH_LE_SHORT`

    - #### readInt

          public int readInt​(long pos)
                      throws IOException

      Description copied from interface: `RandomAccessInput`
      Reads an integer (LE byte order) at the given position in the file
      Specified by:
        `readInt` in interface `RandomAccessInput`
      Throws:
        `IOException`
      See Also:
        `DataInput.readInt()`, `BitUtil.VH_LE_INT`

    - #### readLong

          public long readLong​(long pos)
                        throws IOException

      Description copied from interface: `RandomAccessInput`
      Reads a long (LE byte order) at the given position in the file
      Specified by:
        `readLong` in interface `RandomAccessInput`
      Throws:
        `IOException`
      See Also:
        `DataInput.readLong()`, `BitUtil.VH_LE_LONG`

    - #### length

          public final long length()

      Description copied from class: `IndexInput`
      The number of bytes in the file.
      Specified by:
        `length` in interface `RandomAccessInput`
      Specified by:
        `length` in class `IndexInput`

    - #### clone

          public final ByteBufferIndexInput 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 `IndexInput`s, 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 final ByteBufferIndexInput slice​(String sliceDescription,
                                                  long offset,
                                                  long length)

      Creates a slice of this index input, with the given description, offset, and length. The slice is seeked to the beginning.
      Specified by:
        `slice` in class `IndexInput`

    - #### buildSlice

          protected ByteBufferIndexInput buildSlice​(String sliceDescription,
                                                    long offset,
                                                    long length)

      Builds the actual sliced IndexInput (may apply extra offset in subclasses). *

    - #### newCloneInstance

          protected ByteBufferIndexInput newCloneInstance​(String newResourceDescription,
                                                          ByteBuffer[] newBuffers,
                                                          int offset,
                                                          long length)

      Factory method that creates a suitable implementation of this class for the given ByteBuffers.

    - #### close

          public final void close()
                           throws IOException

      Description copied from class: `IndexInput`
      Closes the stream to further operations.
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in class `IndexInput`
      Throws:
        `IOException`