Package org.apache.lucene.store

## Class IndexInput

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

- All Implemented Interfaces:
    `Closeable`, `AutoCloseable`, `Cloneable`
  Direct Known Subclasses:
    `BufferedIndexInput`, `ByteBufferIndexInput`, `ByteBuffersIndexInput`, `ChecksumIndexInput`, `FilterIndexInput`

      public abstract class IndexInput
      extends DataInput
      implements Closeable

  Abstract base class for input from a file in a `Directory`. A random-access input stream. Used for all Lucene index input operations.

  `IndexInput` may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every `IndexInput` instance must be cloned before it is used in another thread. Subclasses must therefore implement `clone()`, returning a new `IndexInput` which operates on the same underlying resource, but positioned independently.

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

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

  See Also:
    `Directory`

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `IndexInput​(String resourceDescription)` | resourceDescription should be a non-null, opaque string describing this resource; it's returned from `toString()`.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `IndexInput` | `clone()` | Returns a clone of this stream.
    `abstract void` | `close()` | Closes the stream to further operations.
    `abstract long` | `getFilePointer()` | Returns the current position in this file, where the next read will occur.
    `protected String` | `getFullSliceDescription​(String sliceDescription)` | Subclasses call this to get the String for resourceDescription of a slice of this `IndexInput`.
    `abstract long` | `length()` | The number of bytes in the file.
    `RandomAccessInput` | `randomAccessSlice​(long offset, long length)` | Creates a random-access slice of this index input, with the given offset and length.
    `abstract void` | `seek​(long pos)` | Sets current position in this file, where the next read will occur.
    `void` | `skipBytes​(long numBytes)` | Skip over `numBytes` bytes.
    `abstract IndexInput` | `slice​(String sliceDescription, long offset, long length)` | Creates a slice of this index input, with the given description, offset, and length.
    `String` | `toString()` |

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

      `readByte, readBytes, readBytes, readFloats, readGroupVInt, readGroupVInts, readInt, readInts, readLong, readLongs, readMapOfStrings, readSetOfStrings, readShort, readString, readVInt, readVLong, readZInt, readZLong`

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

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

- - ### Constructor Detail

    - #### IndexInput

          protected IndexInput​(String resourceDescription)

      resourceDescription should be a non-null, opaque string describing this resource; it's returned from `toString()`.

  - ### Method Detail

    - #### close

          public abstract void close()
                              throws IOException

      Closes the stream to further operations.
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `Closeable`
      Throws:
        `IOException`

    - #### getFilePointer

          public abstract long getFilePointer()

      Returns the current position in this file, where the next read will occur.
      See Also:
        `seek(long)`

    - #### seek

          public abstract void seek​(long pos)
                             throws IOException

      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.
      Throws:
        `IOException`
      See Also:
        `getFilePointer()`

    - #### skipBytes

          public void skipBytes​(long numBytes)
                         throws IOException

      Skip over `numBytes` bytes. This method may skip bytes in whatever way is most optimal, and may not have the same behavior as reading the skipped bytes. In general, negative `numBytes` are not supported.

      Behavior is functionally equivalent to seeking to `getFilePointer() + numBytes`.

      Specified by:
        `skipBytes` in class `DataInput`
      Throws:
        `IOException`
      See Also:
        `getFilePointer()`, `seek(long)`

    - #### length

          public abstract long length()

      The number of bytes in the file.

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

    - #### clone

          public IndexInput clone()

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

    - #### slice

          public abstract IndexInput slice​(String sliceDescription,
                                           long offset,
                                           long length)
                                    throws IOException

      Creates a slice of this index input, with the given description, offset, and length. The slice is sought to the beginning.
      Throws:
        `IOException`

    - #### getFullSliceDescription

          protected String getFullSliceDescription​(String sliceDescription)

      Subclasses call this to get the String for resourceDescription of a slice of this `IndexInput`.

    - #### randomAccessSlice

          public RandomAccessInput randomAccessSlice​(long offset,
                                                     long length)
                                              throws IOException

      Creates a random-access slice of this index input, with the given offset and length.

      The default implementation calls `slice(java.lang.String, long, long)`, and it doesn't support random access, it implements absolute reads as seek+read.

      Throws:
        `IOException`