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 tomaxMemBufferSizewill be cached in memory (heap). If more thanmaxMemBufferSizebytes are read while the stream is marked, the following bytes are cached on thespillFilefor up tomaxDiskBufferSize. Please note that successive calls tomark()andreset()will write sequentially to the samespillFileuntilmaxDiskBufferSizeis reached. At this point, if less thanmaxDiskBufferSizebytes are currently cached on thespillFile, the remaining bytes are written to the beginning of the file, treating thespillFileas a circular buffer. If more thanmaxMemBufferSize + maxDiskBufferSizeare cached while the stream is marked, the followingreset()invocation will throw aIllegalStateException.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classRewindableDataInputStreamPlus.RewindableDataInputPlusMark-
Nested classes/interfaces inherited from interface org.apache.cassandra.io.util.DataInputPlus
DataInputPlus.DataInputStreamPlus
-
-
Field Summary
Fields Modifier and Type Field Description protected intdiskHeadAvailableprotected intdiskTailAvailableprotected intmemAvailable
-
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 intavailable()longbytesPastMark(DataPosition mark)voidclose()voidclose(boolean closeUnderlying)DataPositionmark()Marks the current position of a stream to return to this position later via thereset(DataPosition)method.voidmark(int readlimit)Marks the current position of a stream to return to this position later via thereset()method.booleanmarkSupported()intread()intread(byte[] b)intread(byte[] b, int off, int len)booleanreadBoolean()bytereadByte()charreadChar()doublereadDouble()floatreadFloat()voidreadFully(byte[] b)voidreadFully(byte[] b, int off, int len)intreadInt()java.lang.StringreadLine()longreadLong()shortreadShort()intreadUnsignedByte()intreadUnsignedShort()java.lang.StringreadUTF()voidreset()voidreset(DataPosition mark)Rewinds to the previously marked position via themark()method.longskip(long n)intskipBytes(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:
markin 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:
resetin 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:
bytesPastMarkin interfaceRewindableDataInput
-
markSupported
public boolean markSupported()
- Overrides:
markSupportedin 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:
markin classjava.io.FilterInputStream- Parameters:
readlimit- the maximum amount of bytes to cache
-
reset
public void reset() throws java.io.IOException- Overrides:
resetin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
available
public int available() throws java.io.IOException- Overrides:
availablein classjava.io.FilterInputStream- Throws:
java.io.IOException
-
read
public int read() throws java.io.IOException- Overrides:
readin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
read
public int read(byte[] b, int off, int len) throws java.io.IOException- Overrides:
readin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
read
public int read(byte[] b) throws java.io.IOException- Overrides:
readin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
skip
public long skip(long n) throws java.io.IOException- Overrides:
skipin classjava.io.FilterInputStream- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Overrides:
closein 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:
readFullyin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readFully
public void readFully(byte[] b, int off, int len) throws java.io.IOException- Specified by:
readFullyin interfacejava.io.DataInput- Throws:
java.io.IOException
-
skipBytes
public int skipBytes(int n) throws java.io.IOExceptionDescription copied from interface:DataInputPlusAlways skips the requested number of bytes, unless EOF is reached- Specified by:
skipBytesin interfacejava.io.DataInput- Specified by:
skipBytesin 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:
readBooleanin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readByte
public byte readByte() throws java.io.IOException- Specified by:
readBytein interfacejava.io.DataInput- Throws:
java.io.IOException
-
readUnsignedByte
public int readUnsignedByte() throws java.io.IOException- Specified by:
readUnsignedBytein interfacejava.io.DataInput- Throws:
java.io.IOException
-
readShort
public short readShort() throws java.io.IOException- Specified by:
readShortin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readUnsignedShort
public int readUnsignedShort() throws java.io.IOException- Specified by:
readUnsignedShortin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readChar
public char readChar() throws java.io.IOException- Specified by:
readCharin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readInt
public int readInt() throws java.io.IOException- Specified by:
readIntin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readLong
public long readLong() throws java.io.IOException- Specified by:
readLongin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readFloat
public float readFloat() throws java.io.IOException- Specified by:
readFloatin interfacejava.io.DataInput- Throws:
java.io.IOException
-
readDouble
public double readDouble() throws java.io.IOException- Specified by:
readDoublein interfacejava.io.DataInput- Throws:
java.io.IOException
-
readLine
public java.lang.String readLine() throws java.io.IOException- Specified by:
readLinein interfacejava.io.DataInput- Throws:
java.io.IOException
-
readUTF
public java.lang.String readUTF() throws java.io.IOException- Specified by:
readUTFin interfacejava.io.DataInput- Throws:
java.io.IOException
-
-