Class LengthMarkedBufferedInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
com.mckoi.util.LengthMarkedBufferedInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public final class LengthMarkedBufferedInputStream extends FilterInputStream
Reads a command block on the underlying stream that is constrained by a length marker preceeding the command. This can be used as a hack work around for non-blocking IO because we know ahead of time how much data makes up the next block of information over the stream.
Author:
Tobias Downer
  • Constructor Details

    • LengthMarkedBufferedInputStream

      public LengthMarkedBufferedInputStream(InputStream in)
      The Constructor.
  • Method Details

    • read

      public int read() throws IOException
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int off, int len) throws IOException
      Overrides:
      read in class FilterInputStream
      Throws:
      IOException
    • available

      public int available() throws IOException
      Overrides:
      available in class FilterInputStream
      Throws:
      IOException
    • markSupported

      public boolean markSupported()
      Overrides:
      markSupported in class FilterInputStream
    • pollForCommand

      public boolean pollForCommand(int max_size) throws IOException
      Checks to see if there is a complete command waiting on the input stream. Returns true if there is. If this method returns true then it is safe to go ahead and process a single command from this stream. This will return true only once while there is a command pending until that command is completely read in.

      'max_size' is the maximum number of bytes we are allowing before an IOException is thrown.

      Throws:
      IOException
    • blockForCommand

      public void blockForCommand() throws IOException
      Blocks until a complete command has been read in.
      Throws:
      IOException