Package com.mckoi.util

## Class LengthMarkedBufferedInputStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.FilterInputStream
    - - com.mckoi.util.LengthMarkedBufferedInputStream

All Implemented Interfaces:
  `java.io.Closeable`, `java.lang.AutoCloseable`

    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

Constructors
`LengthMarkedBufferedInputStream​(java.io.InputStream in)` The Constructor.

### Method Summary

All Methods Instance Methods Concrete Methods
`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.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`

### 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`