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