Package org.apache.commons.io.input.buffer

# Class PeekableInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.commons.io.input.buffer.CircularBufferInputStream
org.apache.commons.io.input.buffer.PeekableInputStream

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

public class PeekableInputStream extends CircularBufferInputStream
Implements a buffered input stream, which allows to peek into the buffers first bytes. This comes in handy when manually implementing scanners, lexers, parsers, and the like.

Since:
  2.7

- ## Field Summary

  ### Fields inherited from class org.apache.commons.io.input.buffer.CircularBufferInputStream

  `buffer, bufferSize`

  ### Fields inherited from class java.io.FilterInputStream

  `in`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PeekableInputStream(InputStream inputStream)`
  Constructs a new instance, which filters the given input stream, and uses a reasonable default buffer size (`IOUtils.DEFAULT_BUFFER_SIZE`).
  `PeekableInputStream(InputStream inputStream, int bufferSize)`
  Constructs a new instance, which filters the given input stream, and uses the given buffer size.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `peek(byte[] sourceBuffer)`
  Returns whether the next bytes in the buffer are as given by `sourceBuffer`.
  `boolean`
  `peek(byte[] sourceBuffer, int offset, int length)`
  Returns whether the next bytes in the buffer are as given by `sourceBuffer`, {code offset}, and `length`.

  ### Methods inherited from class org.apache.commons.io.input.buffer.CircularBufferInputStream

  `close, fillBuffer, haveBytes, read, read`

  ### Methods inherited from class java.io.FilterInputStream

  `available, mark, markSupported, read, reset, skip`

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

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

- ## Constructor Details

  - ### PeekableInputStream

    public PeekableInputStream(InputStream inputStream)
    Constructs a new instance, which filters the given input stream, and uses a reasonable default buffer size (`IOUtils.DEFAULT_BUFFER_SIZE`).
    Parameters:
      `inputStream` - The input stream, which is being buffered.

  - ### PeekableInputStream

    public PeekableInputStream(InputStream inputStream, int bufferSize)
    Constructs a new instance, which filters the given input stream, and uses the given buffer size.
    Parameters:
      `inputStream` - The input stream, which is being buffered.
      `bufferSize` - The size of the `CircularByteBuffer`, which is used internally.

- ## Method Details

  - ### peek

    public boolean peek(byte[] sourceBuffer) throws IOException
    Returns whether the next bytes in the buffer are as given by `sourceBuffer`. This is equivalent to `peek(byte[], int, int)` with `offset` == 0, and `length` == `sourceBuffer.length`
    Parameters:
      `sourceBuffer` - the buffer to compare against
    Returns:
      true if the next bytes are as given
    Throws:
      `IOException` - Refilling the buffer failed.

  - ### peek

    public boolean peek(byte[] sourceBuffer, int offset, int length) throws IOException
    Returns whether the next bytes in the buffer are as given by `sourceBuffer`, {code offset}, and `length`.
    Parameters:
      `sourceBuffer` - the buffer to compare against
      `offset` - the start offset
      `length` - the length to compare
    Returns:
      true if the next bytes in the buffer are as given
    Throws:
      `IOException` - if there is a problem calling fillBuffer()