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 <scottgray1@gmail.com>
    • Constructor Detail

      • 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 Detail

      • 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
      • 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