Package 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 viamark()
ormark(int)
, up tomaxMemBufferSize
will be cached in memory (heap). If more thanmaxMemBufferSize
bytes are read while the stream is marked, the following bytes are cached on thespillFile
for up tomaxDiskBufferSize
. Please note that successive calls tomark()
andreset()
will write sequentially to the samespillFile
untilmaxDiskBufferSize
is reached. At this point, if less thanmaxDiskBufferSize
bytes are currently cached on thespillFile
, the remaining bytes are written to the beginning of the file, treating thespillFile
as a circular buffer. If more thanmaxMemBufferSize + maxDiskBufferSize
are cached while the stream is marked, the followingreset()
invocation will throw aIllegalStateException
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 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 Description protected int
diskHeadAvailable
protected int
diskTailAvailable
protected int
memAvailable
-
Constructor Summary
Constructors Constructor 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 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 thereset(DataPosition)
method.void
mark(int readlimit)
Marks the current position of a stream to return to this position later via thereset()
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 themark()
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.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo
-
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
-
-
-
-
Method Detail
-
mark
public DataPosition mark()
Marks the current position of a stream to return to this position later via thereset(DataPosition)
method.- Specified by:
mark
in interfaceRewindableDataInput
- Returns:
- An empty @link{DataPosition} object
-
reset
public void reset(DataPosition mark) throws java.io.IOException
Rewinds to the previously marked position via themark()
method.- Specified by:
reset
in interfaceRewindableDataInput
- 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 interfaceRewindableDataInput
-
markSupported
public boolean markSupported()
- Overrides:
markSupported
in classjava.io.FilterInputStream
-
mark
public void mark(int readlimit)
Marks the current position of a stream to return to this position later via thereset()
method.- Overrides:
mark
in classjava.io.FilterInputStream
- Parameters:
readlimit
- the maximum amount of bytes to cache
-
reset
public void reset() throws java.io.IOException
- Overrides:
reset
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
available
public int available() throws java.io.IOException
- Overrides:
available
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
read
public int read() throws java.io.IOException
- Overrides:
read
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
read
public int read(byte[] b, int off, int len) throws java.io.IOException
- Overrides:
read
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
read
public int read(byte[] b) throws java.io.IOException
- Overrides:
read
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
skip
public long skip(long n) throws java.io.IOException
- Overrides:
skip
in classjava.io.FilterInputStream
- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classjava.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 interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readFully
public void readFully(byte[] b, int off, int len) throws java.io.IOException
- Specified by:
readFully
in interfacejava.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 interfacejava.io.DataInput
- Specified by:
skipBytes
in interfaceDataInputPlus
- 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 interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readByte
public byte readByte() throws java.io.IOException
- Specified by:
readByte
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readUnsignedByte
public int readUnsignedByte() throws java.io.IOException
- Specified by:
readUnsignedByte
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readShort
public short readShort() throws java.io.IOException
- Specified by:
readShort
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readUnsignedShort
public int readUnsignedShort() throws java.io.IOException
- Specified by:
readUnsignedShort
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readChar
public char readChar() throws java.io.IOException
- Specified by:
readChar
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readInt
public int readInt() throws java.io.IOException
- Specified by:
readInt
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readLong
public long readLong() throws java.io.IOException
- Specified by:
readLong
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readFloat
public float readFloat() throws java.io.IOException
- Specified by:
readFloat
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readDouble
public double readDouble() throws java.io.IOException
- Specified by:
readDouble
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readLine
public java.lang.String readLine() throws java.io.IOException
- Specified by:
readLine
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
readUTF
public java.lang.String readUTF() throws java.io.IOException
- Specified by:
readUTF
in interfacejava.io.DataInput
- Throws:
java.io.IOException
-
-