Class AutoPositioningStream

All Implemented Interfaces:
Closeable, AutoCloseable

final class AutoPositioningStream extends BinaryToRawStream
This Stream is a wrapper for PositionedStoreStream to set the position correctly before performing any operation on it. All the read and skip methods ensure that the PositionedStoreStream is set to right position before actually performing these operations. PositionedStoreStream is accessed within synchronized block to ensure exclusive access to it. This class must be constructed while synchronizing on ConnectionChild.getConnectionSynchronization
  • Field Details

    • conChild

      private final ConnectionChild conChild
      ConnectionChild to get synchronizion object
    • pos

      private long pos
    • positionedStream

      private final PositionedStoreStream positionedStream
  • Constructor Details

    • AutoPositioningStream

      AutoPositioningStream(ConnectionChild conChild, InputStream in, Object parent) throws IOException
      Constructs AutoPositioningStream object. This constructor must be called from block synchronized on conChild.getConnectionSynchronization.
      Parameters:
      conChild - ConnectionChild to get synchronization object before accessing PositionedStoreStream
      in - InputStream
      parent - Parent of the stream to prevent it from being gc.
      Throws:
      IOException - if an I/O error occurs
  • Method Details

    • read

      public int read() throws IOException
      Reads a single byte from the underlying stream.
      Overrides:
      read in class FilterInputStream
      Returns:
      The next byte of data, or -1 if the end of the stream is reached.
      Throws:
      IOException - if an I/O error occurs
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Reads a number of bytes from the underlying stream and stores them in the specified byte array at the specified offset.
      Overrides:
      read in class FilterInputStream
      Returns:
      The actual number of bytes read, or -1 if the end of the stream is reached.
      Throws:
      IOException - if an I/O error occurs
    • skip

      public long skip(long n) throws IOException
      Skips up to the specified number of bytes from the underlying stream.
      Overrides:
      skip in class FilterInputStream
      Returns:
      The actual number of bytes skipped.
      Throws:
      IOException - if an I/O error occurs
    • read

      public int read(byte[] b) throws IOException
      Reads a number of bytes from the underlying stream and stores them in the specified byte array.
      Overrides:
      read in class FilterInputStream
      Returns:
      The actual number of bytes read, or -1 if the end of the stream is reached.
      Throws:
      IOException - if an I/O error occurs
    • setPosition

      private void setPosition() throws IOException
      Checks if positionedStream's position was changed since last used, sets the position to right position if its changed.
      Throws:
      IOException