Class RememberBytesInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
org.apache.derby.impl.store.raw.data.RememberBytesInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class RememberBytesInputStream extends FilterInputStream
A FilterInputStream that remembers read or skipped bytes.

In record mode this stream remembers all the bytes a caller reads or skips. After reading some bytes this returns a 'replay' stream to re-read them.

A caller may call getReplaySteam to get a stream to re-read the the remembered bytes. Any number of calls to getReplayStream are supported.

The clear function causes this stream to forget the remembered bytes and re-enter record mode.

  • Field Details

    • bh

    • recording

      boolean recording
    • streamClosed

      boolean streamClosed
  • Constructor Details

    • RememberBytesInputStream

      public RememberBytesInputStream(InputStream in, ByteHolder bh)
      Construct a RememberBytesInputStream.
      Parameters:
      bh - for storing the remembered bytes. (must be in writing mode.
  • Method Details

    • read

      public int read() throws IOException
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException - thrown on an io error spooling rememberd bytes to backing storage.
      See Also:
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException - thrown on an io error spooling rememberd bytes to backing storage.
      See Also:
    • fillBuf

      public long fillBuf(int len) throws IOException
      read len bytes from the input stream, and store it in the byte holder. Note, fillBuf does not return negative values, if there are no bytes to store in the byteholder, it will return 0
      Throws:
      IOException - thrown on an io error spooling rememberd bytes to backing storage.
    • putBuf

      public int putBuf(OutputStream out, int len) throws IOException
      read len bytes from the byte holder, and write it to the output stream.
      Throws:
      IOException - thrown on an io error spooling rememberd bytes to backing storage.
    • skip

      public long skip(long count) throws IOException
      Overrides:
      skip in class FilterInputStream
      Throws:
      IOException - thrown on an io error spooling rememberd bytes to backing storage.
      See Also:
    • getReplayStream

      public InputStream getReplayStream() throws IOException
      Get an input stream for re-reading the remembered bytes.
      Throws:
      IOException
    • getByteHolder

      public ByteHolder getByteHolder() throws IOException
      Get the byteHolder.
      Throws:
      IOException
    • clear

      public void clear() throws IOException
      Clear all the remembered bytes. This stream will remember any bytes read after this call.
      Throws:
      IOException - thrown on an io error clearing backing storage.
    • setInput

      public void setInput(InputStream in)
      Set the InputStream from which this reads.

      Please note this does not clear remembered bytes.

    • recording

      public boolean recording()
      Return true iff this RememberBytesInputStream is in recording mode.
    • available

      public int available() throws IOException
      Return the number of bytes remains in the byteHolder for reading, without setting the write/read mode.
      Overrides:
      available in class FilterInputStream
      Throws:
      IOException
    • numBytesSaved

      public int numBytesSaved() throws IOException
      Return the number of bytes that have been saved to this byte holder. This result is different from available() as it is unaffected by the current read position on the ByteHolder.
      Throws:
      IOException
    • shiftToFront

      public int shiftToFront() throws IOException
      remove the remaining bytes in the byteHolder to the beginning set the position to start recording just after these bytes. returns how many bytes was transfered to the beginning.
      Throws:
      IOException
    • toString

      public String toString()
      Overrides:
      toString in class Object
      See Also: