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 and 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 and 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.
    `int` | `readInt()` Reads four bytes and returns an int.
    `int` | `readInt(long pos)` Reads an integer at the given position in the file
    `void` | `readLELongs(long[] dst, int offset, int length)` Read a specified number of longs with the little endian byte order.
    `long` | `readLong()` Reads eight bytes and returns a long.
    `long` | `readLong(long pos)` Reads a long at the given position in the file
    `short` | `readShort()` Reads two bytes and returns a short.
    `short` | `readShort(long pos)` Reads a short at the given position in the file
    `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, toString`

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

      `readBytes, readMapOfStrings, readSetOfStrings, readString, readVInt, readVLong, readZInt, readZLong, skipBytes`

    - ### 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)`

    - #### readLELongs

          public void readLELongs(long[] dst,
                                  int offset,
                                  int length)
                           throws IOException

      Description copied from class: `DataInput`
      Read a specified number of longs with the little endian byte order.

      This method can be used to read longs whose bytes have been `reversed` at write time:

           for (long l : longs) {
             output.writeLong(Long.reverseBytes(l));
           }

      Overrides:
        `readLELongs` in class `DataInput`
      Throws:
        `IOException`

    - #### readShort

          public final short readShort()
                                throws IOException

      Description copied from class: `DataInput`
      Reads two bytes and returns a short.
      Overrides:
        `readShort` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `DataOutput.writeByte(byte)`

    - #### readInt

          public final int readInt()
                            throws IOException

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

    - #### readLong

          public final long readLong()
                              throws IOException

      Description copied from class: `DataInput`
      Reads eight bytes and returns a long.
      Overrides:
        `readLong` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `DataOutput.writeLong(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 at the given position in the file
      Specified by:
        `readShort` in interface `RandomAccessInput`
      Throws:
        `IOException`
      See Also:
        `DataInput.readShort()`

    - #### readInt

          public int readInt(long pos)
                      throws IOException

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

    - #### readLong

          public long readLong(long pos)
                        throws IOException

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

    - #### length

          public final long length()

      Description copied from class: `IndexInput`
      The number of bytes in the file.
      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 `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in class `IndexInput`
      Throws:
        `IOException`

Copyright © 2000-2022 Apache Software Foundation. All Rights Reserved.