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.

- - ### 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 and 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

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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 Detail

    - #### 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 Detail

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