Class NonBlockingReaderImpl

All Implemented Interfaces:
Closeable, AutoCloseable, Readable

public class NonBlockingReaderImpl extends NonBlockingReader
This class wraps a regular reader and allows it to appear as if it is non-blocking; that is, reads can be performed against it that timeout if no data is seen for a period of time. This effect is achieved by having a separate thread perform all non-blocking read requests and then waiting on the thread to complete.

VERY IMPORTANT NOTES

  • This class is not thread safe. It expects at most one reader.
  • The shutdown() method must be called in order to shut down the thread that handles blocking I/O.
Since:
2.7
Author:
Scott C. Gray <[email protected]>
  • Field Details

  • Constructor Details

    • NonBlockingReaderImpl

      public NonBlockingReaderImpl(String name, Reader in)
      Creates a NonBlockingReader out of a normal blocking reader. Note that this call also spawn a separate thread to perform the blocking I/O on behalf of the thread that is using this class. The shutdown() method must be called in order to shut this thread down.
      Parameters:
      name - The reader name
      in - The reader to wrap
  • Method Details

    • shutdown

      public void shutdown()
      Shuts down the thread that is handling blocking I/O. Note that if the thread is currently blocked waiting for I/O it will not actually shut down until the I/O is received.
      Overrides:
      shutdown in class NonBlockingReader
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class Reader
      Throws:
      IOException
    • ready

      public boolean ready() throws IOException
      Overrides:
      ready in class Reader
      Throws:
      IOException
    • readBuffered

      public int readBuffered(char[] b, int off, int len, long timeout) throws IOException
      Specified by:
      readBuffered in class NonBlockingReader
      Throws:
      IOException
    • read

      protected int read(long timeout, boolean isPeek) throws IOException
      Attempts to read a character from the input stream for a specific period of time.
      Specified by:
      read in class NonBlockingReader
      Parameters:
      timeout - The amount of time to wait for the character
      isPeek - trueif the character read must not be consumed
      Returns:
      The character read, -1 if EOF is reached, or -2 if the read timed out.
      Throws:
      IOException - if anything wrong happens
    • clear

      public void clear() throws IOException
      Throws:
      IOException