com.mckoi.util
Class LengthMarkedBufferedInputStream

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

public final class LengthMarkedBufferedInputStream
extends java.io.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 Summary
LengthMarkedBufferedInputStream(java.io.InputStream in)
          The Constructor.
 
Method Summary
 int available()
           
 void blockForCommand()
          Blocks until a complete command has been read in.
 boolean markSupported()
           
 boolean pollForCommand(int max_size)
          Checks to see if there is a complete command waiting on the input stream.
 int read()
           
 int read(byte[] b, int off, int len)
           
 
Methods inherited from class java.io.FilterInputStream
close, mark, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LengthMarkedBufferedInputStream

public LengthMarkedBufferedInputStream(java.io.InputStream in)
The Constructor.

Method Detail

read

public int read()
         throws java.io.IOException
Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

read

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

available

public int available()
              throws java.io.IOException
Overrides:
available in class java.io.FilterInputStream
Throws:
java.io.IOException

markSupported

public boolean markSupported()
Overrides:
markSupported in class java.io.FilterInputStream

pollForCommand

public boolean pollForCommand(int max_size)
                       throws java.io.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:
java.io.IOException

blockForCommand

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

Throws:
java.io.IOException