## org.apache.lucene.util
Class UnsafeByteArrayInputStream

    java.lang.Object
      java.io.InputStream
          org.apache.lucene.util.UnsafeByteArrayInputStream

All Implemented Interfaces:
  Closeable

    public class UnsafeByteArrayInputStream

extends InputStream

This class, much like `ByteArrayInputStream` uses a given buffer as a source of an InputStream. Unlike ByteArrayInputStream, this class does not "waste" memory by creating a local copy of the given buffer, but rather uses the given buffer as is. Hence the name Unsafe. While using this class one should remember that the byte[] buffer memory is shared and might be changed from outside. For reuse-ability, a call for `reInit(byte[])` can be called, and initialize the stream with a new buffer.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Constructor Summary
`UnsafeByteArrayInputStream()` Creates a new instance by not using any byte[] up front.
`UnsafeByteArrayInputStream(byte[] buffer)` Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream.
`UnsafeByteArrayInputStream(byte[] buffer, int startPos, int endPos)` Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream, at the specific range: [startPos, endPos)

Method Summary
`int` `available()`
`void` `mark(int readlimit)`
`boolean` `markSupported()`
`int` `read()` Read a byte.
`void` `reInit(byte[] buffer)` Initialize the stream with a given buffer, using the default limits of [0, buffer.length)
`void` `reInit(byte[] buffer, int startPos, int endPos)` Initialize the stream with a given byte array as the source of the stream, at the specific range: [startPos, endPos)
`void` `reset()` Resets the stream back to its original state.

Methods inherited from class java.io.InputStream
`close, read, read, skip`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### UnsafeByteArrayInputStream

    public UnsafeByteArrayInputStream()

  Creates a new instance by not using any byte[] up front. If you use this constructor, you MUST call either of the `reInit` methods before you consume any byte from this instance.
  This constructor is for convenience purposes only, so that if one does not have the byte[] at the moment of creation, one is not forced to pass a `new byte[0]` or something. Obviously in that case, one will call either `reInit` methods before using the class.

### UnsafeByteArrayInputStream

    public UnsafeByteArrayInputStream(byte[] buffer)

  Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream. Default range is [0 , buffer.length)

  Parameters:
    `buffer` - byte array used as the source of this stream

### UnsafeByteArrayInputStream

    public UnsafeByteArrayInputStream(byte[] buffer,
                                      int startPos,
                                      int endPos)

  Creates an UnsafeByteArrayInputStream which uses a given byte array as the source of the stream, at the specific range: [startPos, endPos)

  Parameters:
    `buffer` - byte array used as the source of this stream
    `startPos` - first index (inclusive) to the data lying in the given buffer
    `endPos` - an index (exclusive) where the data ends. data @ buffer[endPos] will never be read

Method Detail

### mark

    public void mark(int readlimit)

  Overrides:
    `mark` in class `InputStream`

### markSupported

    public boolean markSupported()

  Overrides:
    `markSupported` in class `InputStream`

### reInit

    public void reInit(byte[] buffer)

  Initialize the stream with a given buffer, using the default limits of [0, buffer.length)

  Parameters:
    `buffer` - byte array used as the source of this stream

### reInit

    public void reInit(byte[] buffer,
                       int startPos,
                       int endPos)

  Initialize the stream with a given byte array as the source of the stream, at the specific range: [startPos, endPos)

  Parameters:
    `buffer` - byte array used as the source of this stream
    `startPos` - first index (inclusive) to the data lying in the given buffer
    `endPos` - an index (exclusive) where the data ends. data @ buffer[endPos] will never be read

### available

    public int available()
                  throws IOException

  Overrides:
    `available` in class `InputStream`
  Throws:
    `IOException`

### read

    public int read()
             throws IOException

  Read a byte. Data returned as an integer [0,255] If end of stream reached, returns -1

  Specified by:
    `read` in class `InputStream`
  Throws:
    `IOException`

### reset

    public void reset()
               throws IOException

  Resets the stream back to its original state. Basically - moving the index back to start position.

  Overrides:
    `reset` in class `InputStream`
  Throws:
    `IOException`