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
  • 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()
      Description copied from class: NonBlockingReader
      Shuts down the thread that is handling blocking I/O.

      This method terminates the background thread that is used to handle blocking I/O operations. This allows the application to clean up resources and prevent thread leaks when the reader is no longer needed.

      Note that if the thread is currently blocked waiting for I/O, it will not actually shut down until the I/O is received or the thread is interrupted. In some implementations, this method may interrupt the thread to force it to shut down immediately.

      After calling this method, the reader should not be used anymore, as subsequent read operations may fail or block indefinitely.

      Overrides:
      shutdown in class NonBlockingReader
    • close

      public void close() throws IOException
      Description copied from class: NonBlockingReader
      Closes this reader and marks it as closed.

      Subsequent read operations behavior depends on the PROP_CLOSE_MODE setting:

      • "strict" - Throw ClosedException (default in JLine 4.x)
      • "warn" - Log a warning but continue (default in JLine 3.x)
      • "lenient" - Silently allow access
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class NonBlockingReader
      Throws:
      IOException - if an I/O error occurs
    • 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