org.apache.cassandra.io.util

## Class RewindableDataInputStreamPlus

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - org.apache.cassandra.io.util.RewindableDataInputStreamPlus

- All Implemented Interfaces:
    java.io.Closeable, java.io.DataInput, java.lang.AutoCloseable, DataInputPlus, RewindableDataInput

      public class RewindableDataInputStreamPlus
      extends java.io.FilterInputStream
      implements RewindableDataInput, java.io.Closeable

  Adds mark/reset functionality to another input stream by caching read bytes to a memory buffer and spilling to disk if necessary. When the stream is marked via `mark()` or `mark(int)`, up to `maxMemBufferSize` will be cached in memory (heap). If more than `maxMemBufferSize` bytes are read while the stream is marked, the following bytes are cached on the `spillFile` for up to `maxDiskBufferSize`. Please note that successive calls to `mark()` and `reset()` will write sequentially to the same `spillFile` until `maxDiskBufferSize` is reached. At this point, if less than `maxDiskBufferSize` bytes are currently cached on the `spillFile`, the remaining bytes are written to the beginning of the file, treating the `spillFile` as a circular buffer. If more than `maxMemBufferSize + maxDiskBufferSize` are cached while the stream is marked, the following `reset()` invocation will throw a `IllegalStateException`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected static class` | `RewindableDataInputStreamPlus.RewindableDataInputPlusMark`

    - ### Nested classes/interfaces inherited from interface org.apache.cassandra.io.util.DataInputPlus

      `DataInputPlus.DataInputStreamPlus`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected int` | `diskHeadAvailable`
    `protected int` | `diskTailAvailable`
    `protected int` | `memAvailable`

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

      `in`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RewindableDataInputStreamPlus(java.io.InputStream in, int initialMemBufferSize, int maxMemBufferSize, java.io.File spillFile, int maxDiskBufferSize)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `available()`
    `long` | `bytesPastMark(DataPosition mark)`
    `void` | `close()`
    `void` | `close(boolean closeUnderlying)`
    `DataPosition` | `mark()` Marks the current position of a stream to return to this position later via the `reset(DataPosition)` method.
    `void` | `mark(int readlimit)` Marks the current position of a stream to return to this position later via the `reset()` method.
    `boolean` | `markSupported()`
    `int` | `read()`
    `int` | `read(byte[] b)`
    `int` | `read(byte[] b, int off, int len)`
    `boolean` | `readBoolean()`
    `byte` | `readByte()`
    `char` | `readChar()`
    `double` | `readDouble()`
    `float` | `readFloat()`
    `void` | `readFully(byte[] b)`
    `void` | `readFully(byte[] b, int off, int len)`
    `int` | `readInt()`
    `java.lang.String` | `readLine()`
    `long` | `readLong()`
    `short` | `readShort()`
    `int` | `readUnsignedByte()`
    `int` | `readUnsignedShort()`
    `java.lang.String` | `readUTF()`
    `void` | `reset()`
    `void` | `reset(DataPosition mark)` Rewinds to the previously marked position via the `mark()` method.
    `long` | `skip(long n)`
    `int` | `skipBytes(int n)` Always skips the requested number of bytes, unless EOF is reached

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

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

    - ### Methods inherited from interface org.apache.cassandra.io.util.DataInputPlus

      `readUnsignedVInt, readVInt, skipBytesFully`

- - ### Field Detail

    - #### memAvailable

          protected int memAvailable

    - #### diskTailAvailable

          protected int diskTailAvailable

    - #### diskHeadAvailable

          protected int diskHeadAvailable

  - ### Constructor Detail

    - #### RewindableDataInputStreamPlus

          public RewindableDataInputStreamPlus(java.io.InputStream in,
                                               int initialMemBufferSize,
                                               int maxMemBufferSize,
                                               java.io.File spillFile,
                                               int maxDiskBufferSize)

  - ### Method Detail

    - #### mark

          public DataPosition mark()

      Marks the current position of a stream to return to this position later via the `reset(DataPosition)` method.
      Specified by:
        `mark` in interface `RewindableDataInput`
      Returns:
        An empty @link{DataPosition} object

    - #### reset

          public void reset(DataPosition mark)
                     throws java.io.IOException

      Rewinds to the previously marked position via the `mark()` method.
      Specified by:
        `reset` in interface `RewindableDataInput`
      Parameters:
        `mark` - it's not possible to return to a custom position, so this parameter is ignored.
      Throws:
        `java.io.IOException` - if an error ocurs while resetting

    - #### bytesPastMark

          public long bytesPastMark(DataPosition mark)

      Specified by:
        `bytesPastMark` in interface `RewindableDataInput`

    - #### markSupported

          public boolean markSupported()

      Overrides:
        `markSupported` in class `java.io.FilterInputStream`

    - #### mark

          public void mark(int readlimit)

      Marks the current position of a stream to return to this position later via the `reset()` method.
      Overrides:
        `mark` in class `java.io.FilterInputStream`
      Parameters:
        `readlimit` - the maximum amount of bytes to cache

    - #### reset

          public void reset()
                     throws java.io.IOException

      Overrides:
        `reset` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### available

          public int available()
                        throws java.io.IOException

      Overrides:
        `available` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### read

          public int read()
                   throws java.io.IOException

      Overrides:
        `read` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### read

          public int read(byte[] b,
                          int off,
                          int len)
                   throws java.io.IOException

      Overrides:
        `read` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### read

          public int read(byte[] b)
                   throws java.io.IOException

      Overrides:
        `read` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### skip

          public long skip(long n)
                    throws java.io.IOException

      Overrides:
        `skip` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### close

          public void close()
                     throws java.io.IOException

      Specified by:
        `close` in interface `java.io.Closeable`
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Overrides:
        `close` in class `java.io.FilterInputStream`
      Throws:
        `java.io.IOException`

    - #### close

          public void close(boolean closeUnderlying)
                     throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### readFully

          public void readFully(byte[] b)
                         throws java.io.IOException

      Specified by:
        `readFully` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readFully

          public void readFully(byte[] b,
                                int off,
                                int len)
                         throws java.io.IOException

      Specified by:
        `readFully` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### skipBytes

          public int skipBytes(int n)
                        throws java.io.IOException

      Description copied from interface: `DataInputPlus`
      Always skips the requested number of bytes, unless EOF is reached
      Specified by:
        `skipBytes` in interface `java.io.DataInput`
      Specified by:
        `skipBytes` in interface `DataInputPlus`
      Parameters:
        `n` - number of bytes to skip
      Returns:
        number of bytes skipped
      Throws:
        `java.io.IOException`

    - #### readBoolean

          public boolean readBoolean()
                              throws java.io.IOException

      Specified by:
        `readBoolean` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readByte

          public byte readByte()
                        throws java.io.IOException

      Specified by:
        `readByte` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readUnsignedByte

          public int readUnsignedByte()
                               throws java.io.IOException

      Specified by:
        `readUnsignedByte` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readShort

          public short readShort()
                          throws java.io.IOException

      Specified by:
        `readShort` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readUnsignedShort

          public int readUnsignedShort()
                                throws java.io.IOException

      Specified by:
        `readUnsignedShort` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readChar

          public char readChar()
                        throws java.io.IOException

      Specified by:
        `readChar` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readInt

          public int readInt()
                      throws java.io.IOException

      Specified by:
        `readInt` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readLong

          public long readLong()
                        throws java.io.IOException

      Specified by:
        `readLong` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readFloat

          public float readFloat()
                          throws java.io.IOException

      Specified by:
        `readFloat` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readDouble

          public double readDouble()
                            throws java.io.IOException

      Specified by:
        `readDouble` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readLine

          public java.lang.String readLine()
                                    throws java.io.IOException

      Specified by:
        `readLine` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

    - #### readUTF

          public java.lang.String readUTF()
                                   throws java.io.IOException

      Specified by:
        `readUTF` in interface `java.io.DataInput`
      Throws:
        `java.io.IOException`

Copyright © 2018 The Apache Software Foundation